使用具有超全局变量的htmlentities

时间:2014-08-25 03:19:48

标签: php

我正在写一本关于PHP的书。这本书说我应该小心使用超全局变量,所以最好使用这样的htmlentities。

$came_from = htmlentities($_SERVER['HTTP_REFERER']);

所以,我写了这样的代码;

<?php
    $came_from=htmlentities($_SERVER['HTTP_REFERER']);
    echo $came_from;
?>

但是,上面代码的显示是相同的,没有htmlentities();它根本没有改变任何东西。我以为它会改变其他东西。我用错了吗?

2 个答案:

答案 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&bsol;123

这是因为反斜杠是HTML5规范的一部分。见http://dev.w3.org/html5/html-author/charref

答案 1 :(得分:0)

对不起。我之前的回答是完全错误的。我对其他事感到困惑。我道歉让我克制我的回答:

htmlentities会将特殊字符转换为HTML实体。 “&LT;”例如,将转换为“&lt;”。您的浏览器将自动识别此HTML实体并将其解码回“&lt;”。所以你不会注意到任何差异。

这样做的原因是为了防止在以不同于UTF-8编码的方式保存文档时出现问题。因此,任何未编码的字符都可能会被搞砸。