Php parse_url在与正则表达式组合时是否可以检测到格式错误的url?
考虑以下代码,该代码大量尝试检测可能的URL(任何由于点和字符组合而看起来模糊地像域名的内容),并尝试对其进行解析:Php parse_url在与正则表达式组合时是否可以检测到格式错误的url?,php,regex,parsing,url,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' : 'parseabl
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';
}
是否可以为该代码提供一个输入值,用于生成格式错误的URL的$text
?TL;医生:没有
长答案:parse_url
(参见php的C源代码:ext/standard/url.Cphp_url\u parse_ex()
函数)不会检查方案(即这里的http://
)和后续的@
、:
或
之间任何输入的有效性;它只是假设它是主体部分。[注意:对于@
,它将其后面的零件视为主机。]
您的正则表达式只允许字符
[a-zA-Z0-9.]
,因此它在任何情况下都会被识别为主机部分。parse\u url
是解析器,而不是验证器$text='它在任何方面都不是url'代码>结果仍然是“可解析URL”。验证器是这样的:我不是想验证,只是想检测。多亏了这个问题的答案,我可能会放弃对parse\u url
的调用。