Проверить URL и отобразить в виде ссылки в PHP - PullRequest
0 голосов
/ 10 мая 2011

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

Например, если мой текст такой

«Привет, зацените, я нашел отличный сайт и хотел бы поделиться со всеми вами. Вот сайт www.google.com»

Так что в приведенном выше тексте я хотел бы сделать гиперссылку с www.google.com на www.google.com

Какой метод следует использовать для определения формата URL и добавления гиперссылки?

Пожалуйста, предложите. Спасибо.

Ответы [ 3 ]

1 голос
/ 10 мая 2011
function makeClickableLinks($text) {

  $text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)', '<a href="\\1">\\1</a>', $text);

  $text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)', '\\1<a href="http://\\2">\\2</a>', $text);

  $text = eregi_replace('([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})', '<a href="mailto:\\1">\\1</a>', $text);

  return $text;

}

Это правильный ;-) работает для всех HTTP-ссылок (с или без http://) и для ссылок электронной почты. Использование echo makeClickableLinks($string);

Он не поддерживает https, как я вижу, код от http://www.totallyphp.co.uk/code/convert_links_into_clickable_hyperlinks.htm здесь и, кажется, работает. По крайней мере, это пинает вас в правильном направлении.

0 голосов
/ 10 мая 2011

Вы можете использовать этот фрагмент кода:

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

найдено на snipplr.com

0 голосов
/ 10 мая 2011

Это можно сделать с помощью регулярных выражений. Что-то вроде:

echo preg_replace("%((http|https|ftp)://(\S*?\.\S*?))(\s|\;|\)|\]|\[|\{|\}|,|\"|'|:|\<|$|\.\s)%ie", "<a href=\"$1\" target=\"_blank\">$3</a>$4",$text);

* Редактировать: обновленное регулярное выражение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...