2013-12-04 3 views
0

Я использую следующее регулярное выражение для поиска и замены любого внешнего URL-адреса в своем контенте и преобразования его в активную ссылку.Автоматическое преобразование URL-адресов в активную ссылку

$content = preg_replace('#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,[email protected]\[\]+]*)#is', '\\1<a href="/_goto.php?exturl=http://\\2" target="_blank" class="external" rel="nofollow">\\2</a>', $content); 
$content = preg_replace('/<a(.*?)>www./', '<a$1>', $content); 

Он отлично работает, но не поймать URLs между <li> или другими тегами.

Ex: <li>www.google.com</li>

Как я могу изменить его для работы в этом случаи? Благодаря

+0

Это сообщение может помочь вам: http://stackoverflow.com/questions/4217406/php-add-link-to-a-url- in-a-string – Peon

+0

Ваши шаблоны выглядят довольно сложными для этой задачи. Является ли требование, чтобы внешние URL-адреса начинались с первого символа строки и, таким образом, что-то вроде '$ content = 'My http: // google.com'' не конвертировалось? – svoop

+0

В сети множество примеров. Можете ли вы сузить тип URL-адреса, который вы хотите совместить, так как есть так много комбинаций, что он дует. Есть ли формат, который вы можете гарантировать – gwillie

ответ

0

В первом заявлении изменить preg_replace('#(^|[\n ]) к preg_replace('#(^|[\n >])

Но у вас есть еще одна проблема. Хотя ваше регулярное выражение будет захватывать идентификатор фрагмента в конце URL-адреса (#like_this), оно будет добавляться непосредственно к URL-адресу переадресации, а не к URL-адресу, к которому вы пытаетесь перенаправить. Вам нужно будет использовать preg_replace_callback(), чтобы исправить это.

И есть много других случаев, которые вам не хватает, таких как URL-адреса с конечной полной остановкой, запятой, вопросительным знаком или закрывающей скобкой, которые необходимо удалить. Или URL-адреса, которым предшествует открывающая скобка или вкладка ... и т.д. ...

Смежные вопросы