2013-09-28 73 views
0

我在變量中有一個url。如何使用php檢查url的特定部分

<?php 
$a='www.example.com'; 
?> 

我有另一個變量,有這樣

<?php 
$b='example.com'; 
?> 

以什麼方式我可以檢查$ B $和一個相同。我的意思是,即使$ b中的網址就像

'example.com/test','example.com/test.html','www.example.com/example.html' 

我需要檢查$ b是否等於$ a在這種情況下。如果域名更改爲example.net/example.org,則返回false。 我使用strposstrcmp進行了檢查。但是我沒有發現它是檢查url的正確方法。我可以用什麼函數來檢查$ b在這種情況下是否與$ a相似?

+0

可以忽略域部分,只因爲你的服務器被配置爲接收特定域的傳入請求驗證路徑。 – karthikr

+0

我很困惑。你是否試圖比較'$ a'和'$ b'中的根域? –

+1

你需要使用'parse_rul':http://www.php.net/manual/en/function.parse-url.php – Mahdi

回答

1

你可以使用parse_url解析URL並獲取根域,就像這樣:

  • 添加http://到URL如果不是已經存在
  • 使用PHP_URL_HOST不斷
  • explode的URL由點(.
  • 使用可獲取數組中的最後兩個塊獲取URL的主機名部分array_slice
  • 破滅結果數組以得到根域

小函數I製成(whic h是我自己的答案here的修改版本):

function getRootDomain($url) 
{ 
    if (!preg_match("~^(?:f|ht)tps?://~i", $url)) { 
     $url = "http://" . $url; 
    } 

    $domain = implode('.', array_slice(explode('.', parse_url($url, PHP_URL_HOST)), -2)); 
    return $domain; 
} 

測試用例:

$a = 'http://example.com'; 
$urls = array(
    'example.com/test', 
    'example.com/test.html', 
    'www.example.com/example.html', 
    'example.net/foobar', 
    'example.org/bar' 
    ); 

foreach ($urls as $url) { 
    if(getRootDomain($url) == getRootDomain($a)) { 
     echo "Root domain is the same\n"; 
    } 
    else { 
     echo "Not same\n"; 
    } 
} 

輸出:

Root domain is the same 
Root domain is the same 
Root domain is the same 
Not same 
Not same 

注意:此方法並非萬無一失,並可能失敗網址如example.co.uk,您可能需要進行額外的檢查以確保不會發生。

Demo!

+0

感謝您與演示一起回答。它的工作... –

+0

正如你所說,我現在堅持像example.co.uk這樣的網址。我們還可以進一步檢查是否存在網址。全球通用的網址沒有任何限制嗎? –

0

我認爲這個回答能幫助:Searching partial strings PHP

由於這些網址僅僅是字符串反正

+2

再次閱讀問題。 OP已經知道或'strpos()'。 –

+0

但是OP沒有認爲這是使用URL的正確方式。但是這裏的URL只是字符串。因此,他也可以使用它。 – SMillerNL

1

您可以使用parse_url做繁重,然後由點分割的主機名,如果最後檢查兩個元素是相同的:

$url1 = parse_url($url1); 
$url2 = parse_url($url2); 

$host_parts1 = explode(".", $url1["host"]); 
$host_parts2 = explode(".", $url2["host"]); 

if ($host_parts1[count($host_parts1)-1] == $host_parts2[count($host_parts2)-1] && 
    ($host_parts1[count($host_parts1)-2] == $host_parts2[count($host_parts2)-2]) { 
    echo "match"; 
} else { 
    echo "no match"; 
}