2012-01-26 66 views
1

我有一個PHP函數,它需要一個傳遞的URL並創建一個乾淨的鏈接。它將完整的鏈接放在錨標籤中,並從url中呈現「www.domain.com」。它工作的很好,但我想修改它,以便去掉「www」。部分也是如此。正則表達式來創建鏈接從URL和帶www

<?php 
    // pass a url like: http://www.yelp.com/biz/my-business-name 
    // should return: <a href="http://www.yelp.com/biz/my-business-name">yelp.com</a> 
    function formatURL($url, $target=FALSE) { 
     if ($target) { $anchor_tag = "<a href=\"\\0\" target=\"$target\">\\4</a>"; } 
     else { $anchor_tag = "<a href=\"\\0\">\\4</a>"; } 
     $return_link = preg_replace("`(http|ftp)+(s)?:(//)((\w|\.|\-|_)+)(/)?(\S+)?`i", $anchor_tag, $url); 
     return $return_link; 
    } 
?> 

我的正則表達式技能不是那麼強大,所以任何幫助非常感謝。

+0

只有WWW:

$url = preg_replace('/^www./', '', parse_url($url, PHP_URL_HOST)); 

^在正則表達式意味着只能從字符串

工作示例開始刪除www?或者是第一個「。」之前的任何內容? – ManseUK

回答

4

看看parse_url:http://us2.php.net/manual/en/function.parse-url.php

這將簡化你的邏輯相當多能可以使更換了www。簡單的字符串替換。

$link = 'http://www.yelp.com/biz/my-business-name'; 
$hostname = parse_url($link, PHP_URL_HOST)); 
if(strpos($hostname, 'www.') === 0) 
{ 
    $hostname = substr($hostname, 4); 
} 

我修改了我的原始答案,以解決評論中的問題。下面的帖子中的preg_replace也可以工作,並且更加簡潔一些,我將在這裏留下來展示一個替代解決方案,如果您願意,它不需要調用正則表達式引擎。

+1

如果我的網址是「http:// www.myfoobaraddress.www.com」,該怎麼辦?你必須添加一個'strpos($ link,'www。')=== 0'檢查並使用'substr($ link,4)'而不是'str_replace',以便在任何情況下都能正常工作。我知道這不太可能,但它**是一個有效的網址。 – rdlowrey

+0

確實+1,最好是說明所有情況,我已經添加了一個例子來修改第一次出現,但它比下面的答案稍微簡潔一些,我已經讓它表明了可能性。 –

+0

而且我已經取消了我的downvote :) – rdlowrey

2

這將讓你的域名減去wwwhttp://codepad.org/FTNikw8g

+0

@rdlowrey很長的路雖然? – ManseUK

+0

+1我改變了主意。 'strpos'和'substr'檢查URL的複雜性我在其他答案的註釋中注意到,導致我看到光:) – rdlowrey

+0

謝謝。這很好。 – lukemcd