2011-05-19 64 views
1

我有這種代碼正則表達式,它應該將所有類型的不同URL轉換爲一些文本中的鏈接。在php中找到所有的URL(鏈接)文本

preg_replace函數的代碼是:

$regex = '@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@'; 
$text = preg_replace($regex, '<a href="$1">$1</a>', $item); 

現在它適用於幾乎所有你能想象的網址,但我的問題是逗號,並在網址的特殊字符...

的問題是讓我:

http://www.sdfsdfsdf.sd/si/391,1000,1/more.html

http://sdfsddsdf-sdfsdfds.sr/component/option,com_contact/Itemid,3/lang,si/

滑稽這裏計算器這兩個都OK了:)

感謝,最好的問候,

回答

6

你必須編輯你的正則表達式。這將做的工作:

$regex = '@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.\,]*(\?\S+)?)?)*)@'; 

正如你所看到的,這裏有添加[-\w/_\.\,],僅此而已逗號。

享受!

+0

逗號的問題是,如果你有「http://www.avto.si/,http://www.avtooglasnik.com/,http://www.avtooglasi.com/」,這三個將會是與逗號相匹配,什麼是錯的當然:)任何想法? – Luka 2011-05-19 22:15:33

+0

@Luka:不,只有最後一個會與內部的逗號相匹配,其他人只會與不考慮逗號的域匹配。逗號必須在斜槓('/')之後才能匹配爲基於上述 – 2011-05-19 22:23:04

+0

以上的正則表達式的URL的一部分,但是您永遠不會有以逗號開頭的網址,因此這應該是無效的,您可以如此做嗎? thx回答無論如何,最好的:) – Luka 2011-05-19 23:21:41

2

嘗試使用以下功能:

function replaceURLWithHTMLLinks(text) { 
    var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; 
    return text.replace(exp,"<a href='$1'>$1</a>"); 
} 

在這裏找到它:How to replace plain URLs with links?

+0

這不符合所有可能的URL,因爲您將其限制爲四個模式(http,https,ftp和文件)。 – Hyperboreus 2011-05-19 22:11:34

+0

是的,這不匹配大量的網址,比如sdkfskd.cs或www.google.cz等等,......無論如何。 – Luka 2011-05-19 22:16:29

-1

您可以使用此lib https://github.com/mxkh/url-finder簡單查找HTML頁面或文本中的URL。 Iinstall與作曲家composer require mxkh/url-finder

另外,這個lib有一個支持從流行的視頻服務搜索視頻鏈接作爲Youtube,Vimeo。

我希望這對某人有幫助。

相關問題