现在这是一个完全奇怪的行为,我正在经历PHP: htmlentities
似乎不工作时调用;因此,当我这样做时:
echo htmlentities("<iframe>");
浏览器输出未转义的字符串参数,即<iframe>
。
然而,当我调用函数两次,它工作:
echo htmlentities(htmlentities("<iframe>"));
give me: &lt;iframe&gt;
我注意到这个回答的奇怪行为,用户表达了同样的困惑。
现在我有两个问题使用这个"答案是有效的":首先,我知道这是一个奇怪的行为,并不能保证这种奇怪的将复制(我希望它不是!)当我的代码导出到另一个服务器。其次,为什么会出现这种行为?
所以我的问题是:我很想知道这种行为的起源以及该怎么做。
很遗憾你们中的很多人无法验证我的问题,因为我正在本地主机上工作,htmlentities
在其他服务器上工作得很好。
我想你对浏览器解释结果感到困惑
echo htmlentities(htmlentities("<iframe>"));
产生(原始输出)
&lt;iframe&gt;
将<>
转换为<iframe>
第二步是将&
转换为&
当您的浏览器呈现它时,&
将被呈现为&
,从而产生问题中的输出。如果你查看源代码,你会看到我在上面发布的内容。
所以它按预期工作。查看示例
因为当您对字符串<iframe>
进行编码时,输出将作为<iframe>
发送到浏览器。
<iframe>
,但如果您查看渲染页面,您的浏览器将显示解码字符串<iframe>
。
当你对它进行双编码时,"it works"的原因是因为你的浏览器只剥离了一层用于显示的编码。因此,发送到浏览器的原始源是&lt;iframe&gt;
,但显示的文本是<iframe>
。
htmlentities("<iframe>");
创建<iframe>
,它将输出到客户端,就像你把它放在引号里一样,因为浏览器将<
解释为<
,将>
解释为>
。一旦,您在此基础上再次运行它,您实际上正在执行htmlentities('<iframe>')
,其计算结果为&lt;iframe&gt;
,在浏览器中显示为<iframe>
。希望这比@Machavity
的答案更容易理解。