2011-12-07 3 views
2

Сейчас я используюpreg_replace для URL и ссылки для скачивания

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

для замены URL-адреса текст со ссылками. Но он не работает с символами + и ~ в url. Кто-нибудь может понять, что нужно сделать здесь.

А также Я хочу, чтобы его модифицированная версия для скачивания ссылок, которые заменяют текст url Download.

$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 или методологии, чтобы я мог применять оба url и загрузить preg_replace на том же тексте –

ответ

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

EDIT:

Теперь я вижу проблему со связью http://www.abc.com?id=1&query=preg+replace - есть Скобки недостаток в первом регулярном выражении. Я исправил свой первый пример!

+0

, но он не включает # в URL. И мне нужна общая ссылка preg_replace для загрузки или методология, чтобы я мог применять оба url и загружать preg_replace в том же тексте. –

1

Для добавления ~ изменения (https?://([-\w\.]+)+(:\d+)?(/([\w/_\.%-]*(\?\S+)?)?)?) в (https?://([-\w\.]+)+(:\d+)?(/([\w/_\.%-~]*(\?\S+)?)?)?)

1

Предполагается, что переменная $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); 
Смежные вопросы