2011-12-07 64 views
2

現在我使用的preg_replace的網址和下載鏈接

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

與鏈接替換URL文本。但是,它不適用於url中的+和〜符號。任何人都可以弄清楚這裏需要做些什麼。

而且還 我想它該替換的下載URL文本下載鏈接修改後的版本。

$content = preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.%-]*(\?\S+)?)?)?)@', '<a href="$1" target="_blank">Download</a>', $content); 

$fields=array('.exe','.mp3','.pdf','.rar','.doc','.jar','.ppt','.xls','.png','.jpg','.jpeg','.gif','.mp4','.avi','.mkv','.flv','.3gp','.mms','.sis','.sisx','.jad','.mdi','.qcp'); 

擴展。

例如, http://www.abc.com/song1.mp3

<a href="http://www.abc.com/song1.mp3" target="_blank">Download</a> 

http://www.abc.com?id=1&query=preg+replace

<a href="http://www.abc.com?id=1&query=preg+replace" target="_blank">http://www.abc.com?id=1&query=preg+replace</a> 
+0

仍然不包括#在URL中。我想下載鏈接共同的preg_replace以及正常的URL鏈接或讓我可以在同一文本 –

回答

2

試試這個與+鏈接和〜:

@(https?://([-\w\.]+)+(:\d+)?((/[\w/_\.%\-+~]*)?(\?\S+)?)?)@ 

這爲您的下載:

@(https?://([-\w\.]+)+(:\d+)?/[\w/_\.%\-+~]+(\.exe|\.mp3|\.pdf|\.rar|\.doc|\.jar|\.ppt|\.xls|\.png|\.jpg|\.jpeg|\.gif|\.mp4|\.avi|\.mkv|\.flv|\.3gp|\.mms|\.sis|\.sisx|\.jad|\.mdi|\.qcp)(\?\S+)?)@ 

在這裏,您可以測試他們:
http://regexr.com?2vdij
http://regexr.com?2vdia

編輯:

現在,我看到您的問題與環節http://www.abc.com?id=1&query=preg+replace - 有你的第一個正則表達式一個括號中的缺陷。我糾正了我的第一個例子!

+0

同時適用於網址和下載的preg_replace仍然不包括#URL中的方法。我想下載鏈接共同的preg_replace或使我能將這兩個網址並下載同一文本的preg_replace的方法。 –

1

要添加~變化(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.%-]*(\?\S+)?)?)?)(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.%-~]*(\?\S+)?)?)?)

1

假定VAR $content是這樣的文字:

<a href="http://somelink/" target="_blank">Download</a> 

您可以使用此代碼:

$content = preg_replace('!<a href="([^\"]+)" target="_blank">[^<]+</a>!', '<a href="$1" target="_blank">$1</a>', $content);