Preg_replace用于url和下载链接


Preg_replace for url and download links

现在我正在使用

$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&查询=怀孕的+替换

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

对于带有+和~的链接试试:

@(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 -有一个括号缺陷在你的第一个regexp。我已经纠正了我的第一个例子!

添加~(https?://([-'w'.]+)+(:'d+)?(/(['w/_'.%-]*('?'S+)?)?)?)改为(https?://([-'w'.]+)+(:'d+)?(/(['w/_'.%-~]*('?'S+)?)?)?)

假设变量$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);