簡體   English   中英

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 但是,盡管我認為這不是有效的公共網址,但是您會建議什么呢? 回到傳統的正則表達式?

我建議您不要對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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM