我正在写一本关于PHP的书。这本书说我应该小心使用超全局变量,所以最好使用这样的htmlentities。
$came_from = htmlentities($_SERVER['HTTP_REFERER']);
所以,我写了这样的代码;
<?php
$came_from=htmlentities($_SERVER['HTTP_REFERER']);
echo $came_from;
?>
但是,上面代码的显示是相同的,没有htmlentities();它根本没有改变任何东西。我以为它会改变其他东西。我用错了吗?
答案 0 :(得分:1)
因此,默认情况下,htmlentities()
使用ENT_COMPAT
(转换双引号并保留单引号)和ENT_HTML401
对字符进行编码。看作反斜杠不是HTML 4.01实体规范的一部分(据我所知),它不会被转换。
如果指定ENT_HTML5
标志,则会得到不同的结果
php > echo htmlentities('abc\123');
abc\123
php > echo htmlentities('abc\123', ENT_HTML5);
abc\123
这是因为反斜杠是HTML5规范的一部分。见http://dev.w3.org/html5/html-author/charref
答案 1 :(得分:0)
对不起。我之前的回答是完全错误的。我对其他事感到困惑。我道歉让我克制我的回答:
htmlentities会将特殊字符转换为HTML实体。 “&LT;”例如,将转换为“&lt;”。您的浏览器将自动识别此HTML实体并将其解码回“&lt;”。所以你不会注意到任何差异。
这样做的原因是为了防止在以不同于UTF-8编码的方式保存文档时出现问题。因此,任何未编码的字符都可能会被搞砸。