MISGUIDED - htmlentities不起作用

时间:2014-10-22 06:26:07

标签: php html

更新

(我可以删除这个问题 - 但我不妨把它留给每个人,有时候错误是在别的地方而不是我们看的地方......)

我很抱歉,我让你思考这个问题:“实际结果”的原因是在一个完全不同的位置,与htmlentities无关。

感谢所有试图提供帮助的人。


为什么这段代码在我的PHP 5.4.32站点中不起作用?

代码:

$returnValue = htmlentities(urldecode('//echo \'<textarea name="comments" id="comments">$theData</textarea>\';'), ENT_QUOTES, 'UTF-8');
echo '<textarea>' . $returnValue . '</textarea>';

预期结果:

具有确切字符串

的textarea
//echo '<textarea name="comments" id="comments">$theData</textarea>';

实际结果:

具有确切字符串

的textarea
//echo '<textarea name="comments" id="comments">$theData

(原始字符串中的“”实际上关闭了html textarea。)

以同样的方式,可以注入脚本(这就是我最初使用htmlentities的原因)。

非常奇怪的事情:

如果我只是将上面的示例代码添加到我的php文件的开头,它会按预期工作。所以必须有一些理由说明为什么它不能在页面上进一步发挥作用。我不知道,在代码中没有可能的原因。

怎么了?

btw:使用htmlspecialchars不会改变效果。

3 个答案:

答案 0 :(得分:3)

美元符号$不能用单引号解释。

选择并使用以下其中一项:

echo '<textarea name="comments" id="comments">' . $theData . '</textarea>';
echo "<textarea name='comments' id='comments'>$theData</textarea>";
echo "<textarea name='comments' id='comments'>" . $theData . "</textarea>";
echo "<textarea name=\"comments\" id=\"comments\">$theData</textarea>";

答案 1 :(得分:2)

在这种情况下,您不应该使用urldecode()urldecode()将为您提供url编码字符串的原始值(在PHP中为urlencode()的返回值)。您在此处未使用网址编码字符串。

以下内容应该为您提供预期的结果:

$returnValue = htmlentities('//echo \'<textarea name="comments" id="comments">$theData</textarea>\';', ENT_QUOTES, 'UTF-8');
echo '<textarea>' . $returnValue . '</textarea>';

答案 2 :(得分:0)

此代码没有任何问题。完美的工作 - 错误是我的PHP文件中的其他地方......