我正在嘗試讓用戶提交鏈接框。我一整天都在嘗試,似乎無法讓它工作。清理php中的url
的目標是讓所有的這些成example.com ...
輸入是$url =
他們的4種類型的URL(即頂級域之前刪除所有的東西。):
www.example.com...
example.com...
http://www.example.com...
http://example.com...
一切我就1或2種類型的作品,但不是所有的4
怎麼可以這樣做呢?
我正在嘗試讓用戶提交鏈接框。我一整天都在嘗試,似乎無法讓它工作。清理php中的url
的目標是讓所有的這些成example.com ...
輸入是$url =
他們的4種類型的URL(即頂級域之前刪除所有的東西。):
www.example.com...
example.com...
http://www.example.com...
http://example.com...
一切我就1或2種類型的作品,但不是所有的4
怎麼可以這樣做呢?
您可以使用parse_url
。例如:
function parse($url) {
$parts = parse_url($url);
if ($parts === false) {
return false;
}
return isset($parts['scheme'])
? $parts['host']
: substr($parts['path'], 0, strcspn($parts['path'], '/'));
}
這將離開「www」。如果它已經存在,那麼它是微不足道的。 str_replace
。如果你給它的網址嚴重畸形,它將返回false
。
更新(新的改進方案):
我意識到,上面會不正確,如果你試圖欺騙它夠硬的工作。因此,而不是鞭打自己努力,如果沒有一個方案來補償,我意識到這將是更好:
function parse($url) {
$parts = parse_url($url);
if ($parts === false) {
return false;
}
if (!isset($parts['scheme'])) {
$parts = parse_url('http://'.$url);
}
if ($parts === false) {
return false;
}
return $parts['host'];
}
你的輸入可以是
$ url_arr = parse_url($ url);
echo $ url_arr ['host'];
輸出是example.com
有你可以採取得到一個乾淨的URL幾步之遙。
首先,你需要確保有一個協議,使parse_url正常工作,所以你可以這樣做:通過parse_url()
$segments = parse_url($url);
//Make sure it has a protocol
if(substr($url,0,7) != 'http://' || substr($url,0,8) != 'https://')
{
$url = 'http://' . $url;
}
現在我們運行但是,這是它獲得的因爲域名的構建方式很複雜,您可以擁有1,2,3,4,5,6 ..。域級別,這意味着您無法從所有網址中檢測到域名,您必須具有預編譯列表的tld的檢查域的最後一部分,所以你可以分機留下該網站的域名。
有可以在這裏找到一個列表:http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1
但你會分析這個名單到MySQL的更好,然後選擇其中TLD域名字符串的左側相匹配的行。
然後您訂購的長度,限制爲1,如果被發現,那麼你可以這樣做:
$db_found_tld = 'co.uk';
$domain = 'a.b.c.domain.co.uk';
$domain_name = substr($domain,0 - strlen($db_found_tld));
這將使a.b.c.domain
,所以你已經刪除了頂級域名,目前該域名將提取像這樣:
$parts = explode($domain_name);
$base_domain = $parts[count($parts) - 1];
現在你有domain
。
這似乎很漫長,但我希望現在你知道,不容易得到沒有tld或子域的域名。
mail.google.com或en.wikipedia.org怎麼樣?它會是第四和第五類型嗎? – 2011-03-24 20:02:31
@Col。 Shrapnel,我已經發布了關於處理這個問題的更好方法的回覆。 – RobertPitt 2011-03-24 20:28:41