繁体   English   中英

检查URL的最有效方法

[英]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参考。

filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED)

更多信息:

http://ca.php.net/filter_var

也许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;
    }
}

尝试使用正则表达式来查看URL是否具有正确的结构。 以下是对此更多阅读 您需要了解PCRE的工作原理。

您想要的一个简单示例(免责声明:未经测试,不完整)。

function isValidUrl($url) {
    return preg_match('#http://[^/]+/.+#', $url));
}

从这里: 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})*)*(\?(&amp;?([-+_~.\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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM