- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为了验证来自用户输入的 URL 路径,我正在使用 PHP filter_var 函数。输入仅包含路径 (/path/path/script.php)。
验证路径时,我添加了主机。我正在玩一点,测试输入验证等。这样做,我注意到过滤器 URL 函数的奇怪(??)行为。
代码:
$url = "http://www.domain.nl/http://www.google.nl/modules/authorize/test/normal.php";
var_dump(filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED)); //valid
谁能解释为什么这是一个有效的 URL?谢谢!
最佳答案
简短的回答是,PHP FILTER_VALIDATE_URL 仅根据 RFC 2396 检查 URL,您的 URL 虽然很奇怪,但根据上述标准是有效的。
长答案:
您使用的过滤器已声明符合 RFC,因此让我们检查一下该标准 (RFC 2396)。
用于解析 URL 并在此处列出的正则表达式是:
^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
12 3 4 5 6 7 8 9
地点:
scheme = $2
authority = $4
path = $5
query = $7
fragment = $9
正如我们所见,“:”字符仅在方案上下文中保留,从那时起“:”是公平的游戏(标准文本支持这一点)。例如,它在 http: 方案中自由使用来表示端口。斜杠也可以出现在任何地方,并且没有什么可以阻止 URL 在中间的某个位置出现“//”。所以中间的“http://”应该是有效的。
让我们看看你的 URL 并尝试将它与这个正则表达式匹配:
$url = "http://www.domain.nl/http://www.google.nl/modules/authorize/test/normal.php";
//Escaped a couple slashes to make things work, still the same regexp
$result_rfc = preg_match('/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/',$url);
echo '<p>'.$result_rfc.'</p>';
测试返回“1”,因此该 URL 有效。这是意料之中的,因为正如我们所见,规则没有声明中间有“http://”之类的网址无效。 PHP 只是使用 FILTER_VALIDATE_URL 来反射(reflect)这种行为。
如果您想要更严格的测试,您需要自己编写所需的代码。例如,您可以防止“://”出现多次:
$url = "http://www.domain.nl/http://www.google.nl/modules/authorize/test/normal.php";
$result_rfc = preg_match('/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/',$url);
if (substr_count($url,'://') != 1) {
$result_non_rfc = false;
} else {
$result_non_rfc = $result_rfc;
}
您也可以尝试调整正则表达式本身。
关于PHP filter_var URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34411764/
为了验证来自用户输入的 URL 路径,我正在使用 PHP filter_var 函数。输入仅包含路径 (/path/path/script.php)。 验证路径时,我添加了主机。我正在玩一点,测试输入
我正在尝试检查变量是否为整数以及她是否在调音区中:2-15。 我正在尝试使用 filter_var() 函数来实现。但我不明白如何正确使用 min_range 和 max_range 参数。 这行不通
FILTER_VALIDATE_URL 过滤器在验证非 ASCII URL 时似乎有一些问题: var_dump(filter_var('http://pt.wikipedia.org/wiki/',
晚上好。 我最近碰到了 PHP 的 filter_var()。我想知道我是否应该使用哪种类型的清理过滤器和过滤器标志与 filter_var() 一起清理我的密码变量?或者有更好的 sanitizer
以下代码成功验证字符串“0123.250”是否为有效 float 。这是 PHP 错误还是我做错了什么? filter_var('0123.250', FILTER_VALIDATE_FLOAT);
我有一个包含以下行的 PHP 脚本: $query = "SELECT * FROM products WHERE product_id='" . filter_var($_GET[id], FILT
我构建了一个 php 脚本来输出以表单形式发布的数据,但我遇到了一个问题。该网站将要运行的服务器运行 PHP 5.1.6。此版本的 PHP 不支持 filter_var。 我需要知道短期内(最好是昨天
我正在尝试验证我的变量是否是 32 位有符号整数。 我以为我可以使用 filter_var() 和 FILTER_VALIDATE_INT 但显然 PHP 对 int 的定义完全不同,99999999
filter_var 对过滤数据有用吗?它会过滤什么样的不良数据?我确实使用 mysql_real_escape_string 但我想知道添加 filter_var 是否有帮助? 最佳答案 如果可能,
我将如何创建用于 PHP 的自定义过滤器 filter_var() . 一个例子: 现在我有一个功能来验证日期: private function validateDate($date){
这个简单的代码: var_dump(filter_var('example.com', FILTER_VALIDATE_DOMAIN)); // also var_dump(filter_var('e
我正在为联系表单制作一个快速的小电子邮件脚本,但没有设置这些变量($firstName 和 $lastName)。 $firstName = filter_var($_POST['firstName'
为什么 filter_var() 接受并验证此 URL http://http://www.google.com? $website = "http://http://www.google.com";
http://www.php.net/manual/en/filter.filters.flags.php 如何使用此函数将字符串精简为 a-z、数字和 _? 最佳答案 您将不得不使用回调过滤器并编写
早上好 我正在转换我正在处理的网站以与最新版本的 PHP 兼容,因此我正在检查并用未折旧的等效项替换所有 ereg 实例。然而,有人告诉我有一个名为 filter_var 的方便的 PHP 内置函数。
filter_var() 的可靠性如何?你觉得有用吗?它是验证用户输入的好解决方案吗? 最佳答案 虽然我还没有在任何项目中使用过它,但我已经尝试了一下,我尝试过的所有过滤器似乎都工作得很好——而且它比
我显然没有使用 filter_var()正确。我需要检查用户输入的日期是否有效,格式为“dd/mm/yyyy”。 这只是返回我作为日期传递的任何内容,而我希望它返回日期或 0/null/FALSE,以
我正在练习我的 php 初学者技能,想知道为什么这个脚本总是返回 FALSE? 我做错了什么? $namefields = '/[a-zA-Z\s]/'; $value = 'john'; if (!
我有一个类可以在将每个输入发送到数据库层之前对其进行验证。请注意,我的问题与转义或任何事情无关。我的数据库层将处理 SQL 注入(inject)问题。我想要做的就是验证电子邮件是否有效,因为稍后该电子
我想我遇到了 html_entity_decode 的问题,这可能有一个我还没有找到的简单解决方案。这是我的问题,我有这个字符串: L'evento dell'anno 当我保存到数据库中时,会使用
我是一名优秀的程序员,十分优秀!