PHP 检查 url 是否有效
PHP check if url is valid
我想知道 php 中检查提供的 url 是否有效的最佳方法是什么...起初我尝试使用:
filter_var($url, FILTER_VALIDATE_URL) === false
但它不接受www.example.com
(无协议)。所以我尝试了一个简单的修改:
protected function checkReferrerUrl($url) {
if(strpos($url, '://') == false) {
$url = "http://".$url;
}
if(filter_var($url, FILTER_VALIDATE_URL) === false) {
return false;
}
return true;
}
现在它可以与 www.example.com
一起正常工作,但也接受简单的 foo
,因为它转换为 http://foo
。然而,尽管这不是有效的 public url 我认为......那么你有什么建议?回到传统正则表达式?
我建议您不要将 filter_var 与类型 URL 一起使用。
还有更多的副作用。
例如,根据 filter_var:
,这些是有效的 URLs
http://example.com/"><script>alert(document.cookie)</script>
http://example.ee/sdsf"f
另外FILTER_VALIDATE_URL不支持国际化域名(IDN)。
出于安全原因,我建议之后使用正则表达式和一些 ifs(f.e。对于域)。
没有安全方面,我使用 parse_url 来完成我的部分。但是这个函数有一个类似的问题,当方案(没有http/https)丢失时。
使用这个
<?php
$url = 'www.example.com';
if(validateURL($url)){
echo "Valid";
}else{
echo "invalid";
}
function validateURL($URL) {
$pattern_1 = "/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i";
$pattern_2 = "/^(www)((\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i";
if(preg_match($pattern_1, $URL) || preg_match($pattern_2, $URL)){
return true;
} else{
return false;
}
}
?>
也试试这个
<?php
// Assign URL to $URL variable
$url = 'http://example.com';
// Check url using preg_match
if (preg_match("/^(https?:\/\/+[\w\-]+\.[\w\-]+)/i",$url)){
echo "Valid";
}else{
echo "invalid";
}
?>
我想知道 php 中检查提供的 url 是否有效的最佳方法是什么...起初我尝试使用:
filter_var($url, FILTER_VALIDATE_URL) === false
但它不接受www.example.com
(无协议)。所以我尝试了一个简单的修改:
protected function checkReferrerUrl($url) {
if(strpos($url, '://') == false) {
$url = "http://".$url;
}
if(filter_var($url, FILTER_VALIDATE_URL) === false) {
return false;
}
return true;
}
现在它可以与 www.example.com
一起正常工作,但也接受简单的 foo
,因为它转换为 http://foo
。然而,尽管这不是有效的 public url 我认为......那么你有什么建议?回到传统正则表达式?
我建议您不要将 filter_var 与类型 URL 一起使用。 还有更多的副作用。 例如,根据 filter_var:
,这些是有效的 URLshttp://example.com/"><script>alert(document.cookie)</script>
http://example.ee/sdsf"f
另外FILTER_VALIDATE_URL不支持国际化域名(IDN)。
出于安全原因,我建议之后使用正则表达式和一些 ifs(f.e。对于域)。 没有安全方面,我使用 parse_url 来完成我的部分。但是这个函数有一个类似的问题,当方案(没有http/https)丢失时。
使用这个
<?php
$url = 'www.example.com';
if(validateURL($url)){
echo "Valid";
}else{
echo "invalid";
}
function validateURL($URL) {
$pattern_1 = "/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i";
$pattern_2 = "/^(www)((\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i";
if(preg_match($pattern_1, $URL) || preg_match($pattern_2, $URL)){
return true;
} else{
return false;
}
}
?>
也试试这个
<?php
// Assign URL to $URL variable
$url = 'http://example.com';
// Check url using preg_match
if (preg_match("/^(https?:\/\/+[\w\-]+\.[\w\-]+)/i",$url)){
echo "Valid";
}else{
echo "invalid";
}
?>