Preg_replace для URL и ссылок для скачивания - PullRequest
2 голосов
/ 07 декабря 2011

Прямо сейчас я использую

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

для замены текста ссылки ссылками. Но он не работает с символами + и ~ в 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 и запрос = PREG + замена

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

Ответы [ 3 ]

2 голосов
/ 07 декабря 2011

Попробуйте это для ссылок с + и ~:

@(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 - в первом регулярном выражении есть ошибка в скобках Я исправил свой первый пример!

1 голос
/ 07 декабря 2011

Предполагается, что переменная $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);
1 голос
/ 07 декабря 2011

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

...