Версия для печати. Взято с сайта phpsql.ru

На главную   Назад   Вперед

Автоматическое создание гиперссылок

Большинство форумов и блогов умеют автоматически конвертировать URL в постах и комментариях в гиперссылки. Простейший способ реализовать эту функцию заключается в следующем: нужно выделить ссылку, которой предшествует http: //, затем сгруппировать ее и добавить тег ссылки вокруг нее. Но это неправильно! А что делать, если кто-то уже использует код ссылки? Тогда мы получим настоящий беспорядок!

Поэтому нам сначала нужно найти способ, позволяющий убедиться, что URL не находится внутри тега ссылки. Вы можете подумать, что нужно использовать модификатор ? !, который означает «отклонить все, что совпадает с этой группой». Однако это сработает в регулярном выражении, если нежелаемая группа следует за тем, что вы хотите найти, поскольку так работают регулярные выражения - они обрабатывают строку посимвольно и никогда не смотрят обратно. Поэтому вам нужно использовать функцию lookbehind assertion, которая проверяет эти условия, когда вы хотите получить совпадение позже в регулярном выражении. Для активации этой функции используется модификатор группы ?Другими словами, если уже есть URL, которому предшествует href=", то не нужно ничего менять:

preg_replace(’| (?<!href=") (https?://[A-Za-z0-9+-=._/*(),@’$:;&!?%]+) |i’, ’<а href=”$l">$l</a>’, $string);
Большая часть этого выражения - это символы, которые могут встречаться в URL. Очевидно, что есть много вариантов совершенствования этой темы, например проверка корректности написания доменного имени, но основная работа сделана.

 
Предыдущая   На главную   Следующая