Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 对超全局变量使用htmlentities_Php - Fatal编程技术网

Php 对超全局变量使用htmlentities

Php 对超全局变量使用htmlentities,php,Php,我现在正在用一本书研究php。书中说我应该小心使用超全局变量,所以最好像这样使用htmlentities $came_from = htmlentities($_SERVER['HTTP_REFERER']); 所以,我写了一个这样的代码 <?php $came_from=htmlentities($_SERVER['HTTP_REFERER']); echo $came_from; ?> 但是,上面代码的显示在没有htmlentities()的情况下是相同的

我现在正在用一本书研究php。书中说我应该小心使用超全局变量,所以最好像这样使用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&bsol;123

这是因为反斜杠是HTML5规范的一部分。请参见

为什么希望它编码?”\“?不,你做得对,只是
htmlentities
只会在需要转义时转义值-这是一个安全问题。因此,如果没有需要转义的内容,那么它将是相同的。顺便说一句,如果您计划在某个时候将该值作为页面的一部分输出,您只需要使用
htmlspecialchars
(或
htmlspecialchars
)。如果您只是在PHP代码中检查它,那么这并不重要。通常它与
$\u GET
$\u POST
更相关。但我确实看到您在这里重复了它,所以如果这不仅仅是您计划稍后删除的测试代码,那么在这种情况下您确实应该使用
htmlentities
。这与
htmlentities()
的功能完全不符
htmlspecialchars()
/
htmlspecialchars()
用于编码,通常用于清理HTML文档中的内容输出。这与“混淆PHP服务器”毫无关系,我认为HTML编码的最大用途是避免XSS漏洞