【发布时间】:2016-04-28 22:44:24
【问题描述】:
在这里我很困惑为什么var_dump 中的FILTER_SANITIZE_URL 返回错误的字符串长度并且不删除诸如 .这发生在所有 filter_var 预定义的过滤器常量中。这是错误还是背后有逻辑?
我使用 PHP 5.4 是因为我必须这样做,我们的服务器在它上面运行。让我来演示一下。 我有这个网址:
$url = 'http://www.example.com/index.php?a=1&b=2&c=3&d=some%20string';
如果我对其进行清理并 var_dump 它:
var_dump(filter_var($url, FILTER_SANITIZE_URL));
它会返回:
string(60) "http://www.example.com/index.php?a=1&b=2&c=3&d=some%20string"
现在,如果我在 URL 中放入恶意代码
$url = 'http://www.example.com/index.php?
<script>
function myFunction() {
var x = "<?php echo $var; ?>";
alert(x);
}
</script>a=1&b=2&c=3&d=some%20string';
相同的代码:var_dump(filter_var($url, FILTER_SANITIZE_URL));
将返回:
string(132) "http://www.example.com/index.php?a=1&b=2&c=3&d=some%20string"
注意返回var的类型和长度。比前一个多 72 个字符,但显然字符串仍然是 60 个字符长。为什么 var_dump 或 filter_var 会以这种方式表现?如果这是一个错误,则已修复。当我记录这些类型的数据时,我需要这个函数来返回确切的字符数。
【问题讨论】:
-
FILTER_SANITIZE_URL 从 url 中删除了所有不必要的字符,包括空格,如果你检查查看源它显示
-
@devpro ...我知道...但是为什么它仍然在 var_dump 上返回 132 个字符?
-
因为, 包含在此计数中,并且 y 不可见,因为它在
-
如果你看 var_dump 手册它会说它会返回字符串的类型和长度但是长度是错误的!
-
var_dump(htmlspecialchars(filter_var($url, FILTER_SANITIZE_URL)));会告诉你真相。 (或者看看HTML源代码,之前它被浏览器解释为HTML。)
标签: php var-dump filter-var