[英]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
。 但是,盡管我認為這不是有效的公共網址,但是您會建議什么呢? 回到傳統的正則表達式?
我建議您不要對URL類型使用filter_var。 還有更多的副作用。 例如,這些是根據filter_var的有效URL:
http://example.com/"><script>alert(document.cookie)</script>
http://example.ee/sdsf"f
此外,FILTER_VALIDATE_URL不支持國際化域名(IDN)。
出於安全原因,我建議事后將正則表達式與某些ifs組合使用(對於域來說是fe)。 沒有安全性方面,我正在使用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";
}
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.