Preg_replace for url和下载链接

时间:2011-12-07 11:37:55

标签: php regex url 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>

3 个答案:

答案 0 :(得分: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的问题 - 你的第一个正则表达式中有一个括号缺陷。我纠正了我的第一个例子!

答案 1 :(得分:1)

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

答案 2 :(得分: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);