htmlentities 仅在调用两次时才在浏览器上工作
htmlentities works on browser only when called twice
现在我在使用 PHP 时遇到了一个完全奇怪的行为:htmlentities
似乎在调用时不起作用;因此,当我这样做时:
echo htmlentities("<iframe>");
浏览器输出未转义的字符串参数,即<iframe>
。
但是,当我调用该函数两次时,它起作用了:
echo htmlentities(htmlentities("<iframe>"));
给我:&lt;iframe&gt;
我注意到奇怪的行为 from this answer 用户表达了同样的困惑。
现在我在使用这个 "answer which works" 时有两个问题:首先,我知道这是一种奇怪的行为,并且不能保证当我的代码导出到另一台服务器。其次,为什么会出现这种行为?
所以我的问题是:我很想知道这种行为的起源以及如何处理它。
鉴于我正在本地主机上工作并且 htmlentities
在其他服务器上工作正常,因此很多人无法验证我的问题,这很遗憾。
我认为您对浏览器解释结果感到困惑
echo htmlentities(htmlentities("<iframe>"));
生成(原始输出)
&lt;iframe&gt;
第一遍将 <>
转换为 <iframe>
第二步是将 &
转换为 &
当您的浏览器呈现它时,&
会呈现为 &
,从而产生您问题中的输出。如果您查看源代码,您会看到我在上面发布的内容。
所以它按预期工作。 See a demo
因为当您对字符串 <iframe>
进行编码时,输出将作为 <iframe>
.
发送到浏览器
现在,如果您要查看响应的 来源,您会按预期看到 <iframe>
,但如果您正在查看 渲染页面您的浏览器将显示解码后的字符串<iframe>
.
之所以"it works"双重编码是因为浏览器只剥离了一层编码显示。所以发送到浏览器的原始源是&lt;iframe&gt;
,但显示的文本是<iframe>
。
htmlentities("<iframe>");
创建 <iframe>
,就像你把它放在引号中一样输出到客户端,因为浏览器将 <
解释为 <
和 >
作为 >
。有一次,你再次 运行 它,你真的在做这个 htmlentities('<iframe>')
,计算结果为 &lt;iframe&gt;
,在浏览器中显示为 <iframe>
。希望这比 @Machavity
的回答更容易让您理解。
现在我在使用 PHP 时遇到了一个完全奇怪的行为:htmlentities
似乎在调用时不起作用;因此,当我这样做时:
echo htmlentities("<iframe>");
浏览器输出未转义的字符串参数,即<iframe>
。
但是,当我调用该函数两次时,它起作用了:
echo htmlentities(htmlentities("<iframe>"));
给我:&lt;iframe&gt;
我注意到奇怪的行为 from this answer 用户表达了同样的困惑。
现在我在使用这个 "answer which works" 时有两个问题:首先,我知道这是一种奇怪的行为,并且不能保证当我的代码导出到另一台服务器。其次,为什么会出现这种行为?
所以我的问题是:我很想知道这种行为的起源以及如何处理它。
鉴于我正在本地主机上工作并且 htmlentities
在其他服务器上工作正常,因此很多人无法验证我的问题,这很遗憾。
我认为您对浏览器解释结果感到困惑
echo htmlentities(htmlentities("<iframe>"));
生成(原始输出)
&lt;iframe&gt;
第一遍将 <>
转换为 <iframe>
第二步是将 &
转换为 &
当您的浏览器呈现它时,&
会呈现为 &
,从而产生您问题中的输出。如果您查看源代码,您会看到我在上面发布的内容。
所以它按预期工作。 See a demo
因为当您对字符串 <iframe>
进行编码时,输出将作为 <iframe>
.
现在,如果您要查看响应的 来源,您会按预期看到 <iframe>
,但如果您正在查看 渲染页面您的浏览器将显示解码后的字符串<iframe>
.
之所以"it works"双重编码是因为浏览器只剥离了一层编码显示。所以发送到浏览器的原始源是&lt;iframe&gt;
,但显示的文本是<iframe>
。
htmlentities("<iframe>");
创建 <iframe>
,就像你把它放在引号中一样输出到客户端,因为浏览器将 <
解释为 <
和 >
作为 >
。有一次,你再次 运行 它,你真的在做这个 htmlentities('<iframe>')
,计算结果为 &lt;iframe&gt;
,在浏览器中显示为 <iframe>
。希望这比 @Machavity
的回答更容易让您理解。