[英]Most efficient way to check a URL
我正在尝试检查用户提交的URL是否有效,当用户点击提交时,它会直接进入数据库。 到目前为止,我有:
$string = $_POST[url];
if (strpos($string, 'www.') && (strpos($string, '/')))
{
echo 'Good';
}
提交的页面应该是目录中的页面,而不是主站点,所以http://www.address.com/page
我如何检查第二个/
没有它认为它来自http://
并且没有不包括.com
?
样本输入:
Valid:
http://www.facebook.com/pageName
http://www.facebook.com/pageName/page.html
http://www.facebook.com/pageName/page.*
Invalid:
http://www.facebook.com
facebook.com/pageName
facebook.com
请参阅parse_url()
函数。 这将在单独的字符串中为您提供URL的“/ page”部分,然后您可以根据需要进行分析。
if(!parse_url('http://www.address.com/page', PHP_URL_PATH)) {
echo 'no path found';
}
请参阅parse_url
参考。
也许strrpos会帮助你。 它将在字符串中找到字符串的最后一次出现
要检查URL的格式,您可以使用正则表达式:
preg_match [ http://php.net/manual/en/function.preg-match.php ]是一个很好的开始,但需要了解正则表达式才能使其正常工作。
此外,如果您确实要检查它是否是有效的URL,您可以检查URL值以查看它是否实际解析为网页:
function check_404($url) {
$return = @get_headers($url);
if (strpos($return[0], ' 404 ') === false)
return true;
else {
return false;
}
}
从这里: http : //www.blog.highub.com/regular-expression/php-regex-regular-expression/php-regex-validating-a-url/
<?php
/**
* Validate URL
* Allows for port, path and query string validations
* @param string $url string containing url user input
* @return boolean Returns TRUE/FALSE
*/
function validateURL($url)
{
$pattern = '/^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/';
return preg_match($pattern, $url);
}
$result = validateURL('http://www.google.com');
print $result;
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.