2012-03-23 56 views
3

您好,我需要在PHP例如添加一個href標記周圍的鏈接在鳴叫如果我的鳴叫是這樣的:的裹繞在鳴叫與PHP的鏈接標籤

@username tweet body message http://t.co/sfr34s5 

我需要變成這個這個用PHP:

@username tweet body message <a href="http://t.co/sfr34s5">http://t.co/sfr34s5</a> 

,我認爲這可以使用的preg_replace做,我有類似的東西它已經環繞twitter的@用戶名,如下鏈接:

$tweet= preg_replace('/@([a-z0-9_]+)/i', '<a href="http://twitter.com/$1" target="_blank">@$1</a>', $tweet); 

如何編輯這個正則表達式的一部分,以便在出現的tweets中爲URL添加標籤?

+0

這可能有助於http://stackoverflow.com/questions/1925455/how-to-mimic-stackoverflow-auto-link-behavior – 2012-03-23 14:04:29

回答

9

嘗試以下代碼:

$source = '@username tweet body message http://t.co/sfr34s5'; 
$pattern = '/(http:\/\/[a-z0-9\.\/]+)/i'; 
$replacement = '<a href="$1" target="_blank">$1</a>'; 

$source = preg_replace($pattern, $replacement, $source); 

正則表達式匹配所有以啓動字符串的「http://」,並且隨後的字母數字值的序列,正斜線或點。

應該適用於所有情況,但是,如果你只是試圖提取t.co鏈接,您可以使用該模式的這個版本更安全:

$pattern = '/(http:\/\/t\.co\/[a-z0-9]+)/i'; 

這將只匹配的「http:// t.co/[alnum-chars。

如果您需要匹配所有網址,您將不得不根據您的要求修改模式。例如。匹配http://t.co/abcde?x=1&y=2你就需要使用以下模式:

$pattern = '/(http:\/\/[a-z0-9\.\/?=&]+)/i'; 

我測試了這個在PHP5.3,並與您指定的URL工作。

+0

酷!謝謝。 – trante 2012-09-10 13:42:35