Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP url识别_Php_Regex_Url - Fatal编程技术网

PHP url识别

PHP url识别,php,regex,url,Php,Regex,Url,如何检查用户输入的文本是否为url 假设我想检查文本是否为url,然后检查字符串中是否有“youtube.com”。之后,我想获得子字符串“watch?v=”和任何参数(如果存在)之间我感兴趣的链接部分。在这里可能是一个不错的选择。如果得到错误的URL,函数将返回false。否则,它会将URL分解为其组件,您可以使用所需的组件 例如: $urlParts = parse_url('http://www.youtube.com/watch?v=MX0D4oZwCsA'); if ($urlPart

如何检查用户输入的文本是否为url

假设我想检查文本是否为url,然后检查字符串中是否有“youtube.com”。之后,我想获得子字符串“watch?v=”和任何参数(如果存在)之间我感兴趣的链接部分。

在这里可能是一个不错的选择。如果得到错误的URL,函数将返回
false
。否则,它会将URL分解为其组件,您可以使用所需的组件

例如:

$urlParts = parse_url('http://www.youtube.com/watch?v=MX0D4oZwCsA');
if ($urlParts == false) echo "Bad URL";
else echo "Param string is ".$urlParts['query'];
产出:

Param string is v=MX0D4oZwCsA
您可以根据需要使用for特定参数拆分查询部分


编辑:请记住,
parse_url()
尽可能努力解析给定的字符串,因此坏url通常会成功,尽管生成的数据数组非常奇怪。显然,您希望验证的确定程度以及您对用户输入的确切要求取决于您。

强烈建议不要使用parse_url()进行url验证。
preg_match('#watch\?v=([^&]+)#', $url, $matches);
echo $matches[1];

是一个很好的解决方案。

+1用于不指向存在特定函数的基于正则表达式的解决方案。@Sarwar Erfan-基于正则表达式的解决方案有什么问题?)@SaltLake更难维护,更难理解,更难调试。我相信我可以在列表中添加更多…@SaltLake-当还没有一个好的、经过测试的、现成的解决方案包装在一个方便的API中时,Regexp解决方案没有问题。SaltLake:regex实际上没有问题:)我认为php函数很可能是在幕后使用regex的。但是,php必须使用经过测试的模式。再说一遍,对regex没有什么反对的。为什么不呢?该网站没有解释原因。你还应该在链接中提供解释。StackOverflow应该独立存在,并通过链接进行增强,而不是被链接取代。