2013-02-13 146 views
1

我已經看到了關於這個確切主題的一堆問題,但似乎沒有一個能夠解決我的問題。我想創建一個功能,將刪除網站地址的所有內容,除了域名。 例如,如果用戶輸入:​​我想計算器,並以同樣的方式,如果用戶輸入facebook.com/user/bacon我想Facebook的在PHP中刪除字符串的某些部分

有誰知道一個函數或方法,我可以刪除某些部分的字符串?也許它會搜索http,當發現它會刪除一切,直到//然後它會搜索www,如果發現它會刪除所有東西,直到。然後它將所有內容保存到下一個點,在那裏刪除它後面的所有內容?現在看,這可能會導致網站出現問題http://www.en.wikipedia.org,因爲我只剩下en。

任何想法(最好在PHP中,但也歡迎JavaScript)?

編輯1: 多虧了很好的意見,我想我已經能夠制定出一個函數,做什麼,我想:

function getdomain($url) { 
    $parts = parse_url($url); 
    if($parts['scheme'] != 'http') { 
     $url = 'http://'.$url; 
    } 
    $parts2 = parse_url($url); 

    $host = $parts2['host']; 
    $remove = explode('.', $host); 

    $result = $remove[0]; 
    if($result == 'www') { 
     $result = $remove[1]; 
    } 

    return $result; 
} 

它並不完美,至少考慮到子域,但我認爲有可能對此做些事情。也許在結尾添加第二個if語句來檢查數組的長度。如果它大於2,則選擇項目nr1而不是項目nr0。這顯然會給我使用.co.uk的任何域名帶來麻煩(因爲那會長樹項目,但我不想返回co)。我會盡力解決這個問題,看看我想出了什麼。如果你們有些PHP大師可以看一下,我會很高興。我並不熟練或經歷任何的你...:P

+0

沒有直接回答你的問題(因爲它看起來像一個[XY問題](http://www.perlmonks.org/index.pl?node_id=542341)),爲什麼不使用[parse_url函數] (http://php.net/manual/en/function.parse-url.php)? – kojiro 2013-02-13 18:17:36

+0

好的,謝謝。我試着尋找答案,但只發現有人想分裂讓我們說一個字符串,其中包含預設的東西。我不知道在php中有一個函數做了我想要的。非常感謝! :) – Aleksander 2013-02-13 18:19:38

+0

它必須是一個可以訪問當前[tld](https://en.wikipedia.org/wiki/Top-level_domain)或[公共後綴列表](https)列表的例程://en.wikipedia.org/wiki/Public_Suffix_List),以正確分析實際的域名部分,你感興趣的地方開始。 – 2013-02-13 18:21:43

回答

-2

這是一個非常快速的方法,但應該做你想做的事,PHP:

function getDomain($URL) { 
    return explode('.',$URL)[1]; 
} 

當我我會更新得到機會,但基本上它將URL分割成片段,然後返回應該是域的第二項。如果www.abc.xyz.com這些較長的域名需要更多的邏輯,但對於普通的url來說就足夠了。

+0

它不會爲http://stackoverflow.com(沒有www)爲例。 – Napolux 2013-02-13 18:20:58

+1

您不能在5.4之前的PHP版本中爲下標返回一個數組。 – kojiro 2013-02-13 18:20:59

0

的Javascript:

document.domain.replace(".com","") 

PHP:

$url = 'http://google.com/something/something'; 
$parse = parse_url($url); 
echo str_replace(".com","", $parse['host']); //returns google 
1

使用parse_url的URL拆分成不同的部分。你需要的是主機名。然後,你會希望由點分割,並得到第一部分:

$url = 'http://facebook.com/blahblah'; 
$parts = parse_url($url); 
$host = $parts['host']; // facebook.com 
$foo = explode('.', $host); 
$result = $foo[0]; // facebook 
+0

謝謝!偉大的工作:) – Aleksander 2013-02-13 18:22:35

+0

「mydomain.co.uk」呢? – 2013-02-13 18:22:37

+0

@fireeyedboy它會正確返回「mydomain」,因爲我們得到結果(在這種情況下是3個元素)數組的第一項( – Gargron 2013-02-13 18:23:57

0

可以使用parse_url函數從PHP返回你想要什麼 - see

+0

是的,我直到現在還不知道。謝謝回答 :) – Aleksander 2013-02-13 18:22:56

0

你要找的正則表達式的信息。這有點複雜,所以請準備好閱讀。在你的情況下,你最好利用preg_matchpreg_replace。它會根據您的模式搜索匹配項,並用替換項替換匹配項。

preg_match preg_replace

我會用這樣的方式開始:找到.com.net.org和之後刪除它和一切。然後找到最後的.並刪除它以及它前面的所有內容。最後,如果存在//,請刪除它及其前面的所有內容。

if (preg_match("/^http:\/\//i",$url)) 
preg_replace("/^http:\/\//i","",$url); 

if (preg_match("/www./i",$url)) 
preg_replace("/www./i","",$url); 

if (preg_match("/.com/i",$url)) 
preg_replace("/.com/i","",$url); 

if (preg_match("/\/*$/",$url)) 
preg_replace("/\/*$/","",$url); 

=字符串的開始^ i =不區分大小寫 \ =逃逸字符 $ =字符串的結尾

這必須要與周圍的發揮和調整,但它應該讓你指出正確的方向。