当与正则表达式结合使用时,parse_url是否可以检测到格式错误的URL?

时间:2016-08-15 14:02:36

标签: php regex parsing url

考虑以下代码,这些代码可以自由地尝试检测可能的URL(由于组合点和字符而看起来模糊地看起来像域名),并尝试解析它:

if ( preg_match( '/[a-z\.0-9]+\.[a-z]{2,6}/i', $text, $possibleUrl ) ) {
    $urlResult = parse_url( 'http://' . $possibleUrl[0] );
    echo $urlResult === false ? 'malformed URL' : 'parseable URL';
}

是否可以为该代码提供$text的输入值,以产生输出malformed URL

1 个答案:

答案 0 :(得分:1)

TL; DR:否。

长答案:parse_url(参见php的源代码:ext / standard / url.c php_url_parse_ex()函数)不检查方案之间任何输入的有效性(即{{1此处)以及后续http://@:;它只是假设它是主机部分。 [注意:对于/,它会将之后的部分视为主机。]

您的正则表达式只允许使用字符@,因此无论如何都会将其识别为主机部分。