考虑以下代码,这些代码可以自由地尝试检测可能的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
?
答案 0 :(得分:1)
TL; DR:否。
长答案:parse_url
(参见php的源代码:ext / standard / url.c php_url_parse_ex()
函数)不检查方案之间任何输入的有效性(即{{1此处)以及后续http://
,@
或:
;它只是假设它是主机部分。 [注意:对于/
,它会将之后的部分视为主机。]
您的正则表达式只允许使用字符@
,因此无论如何都会将其识别为主机部分。