Php 对超全局变量使用htmlentities
我现在正在用一本书研究php。书中说我应该小心使用超全局变量,所以最好像这样使用htmlentitiesPhp 对超全局变量使用htmlentities,php,Php,我现在正在用一本书研究php。书中说我应该小心使用超全局变量,所以最好像这样使用htmlentities $came_from = htmlentities($_SERVER['HTTP_REFERER']); 所以,我写了一个这样的代码 <?php $came_from=htmlentities($_SERVER['HTTP_REFERER']); echo $came_from; ?> 但是,上面代码的显示在没有htmlentities()的情况下是相同的
$came_from = htmlentities($_SERVER['HTTP_REFERER']);
所以,我写了一个这样的代码
<?php
$came_from=htmlentities($_SERVER['HTTP_REFERER']);
echo $came_from;
?>
但是,上面代码的显示在没有htmlentities()的情况下是相同的;这根本没有改变什么。我以为它会变成别的东西。我用错了吗?对不起。我以前的回答完全错了。我被别的东西弄糊涂了。我道歉。让我重复我的回答: htmlentities将特殊字符转换为其HTML实体。“因此,默认情况下,使用
ENT\u COMPAT
(转换双引号,不使用单引号)和ENT\u HTML401
对字符进行编码。鉴于反斜杠不是HTML4.01实体规范的一部分(据我所知),它不会被转换
如果指定ENT\u HTML5
标志,则会得到不同的结果
php > echo htmlentities('abc\123');
abc\123
php > echo htmlentities('abc\123', ENT_HTML5);
abc\123
这是因为反斜杠是HTML5规范的一部分。请参见为什么希望它编码?”\“?不,你做得对,只是
htmlentities
只会在需要转义时转义值-这是一个安全问题。因此,如果没有需要转义的内容,那么它将是相同的。顺便说一句,如果您计划在某个时候将该值作为页面的一部分输出,您只需要使用htmlspecialchars
(或htmlspecialchars
)。如果您只是在PHP代码中检查它,那么这并不重要。通常它与$\u GET
和$\u POST
更相关。但我确实看到您在这里重复了它,所以如果这不仅仅是您计划稍后删除的测试代码,那么在这种情况下您确实应该使用htmlentities
。这与htmlentities()
的功能完全不符htmlspecialchars()
/htmlspecialchars()
用于编码,通常用于清理HTML文档中的内容输出。这与“混淆PHP服务器”毫无关系,我认为HTML编码的最大用途是避免XSS漏洞