Проверять URL и отображать как ссылку в PHP

#php #validation

#php #проверка

Вопрос:

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

Например, если мой текст выглядит следующим образом

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

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

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

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

Ответ №1:

 function makeClickableLinks($text) {

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

  $text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_ .~#?amp;//=] )', '\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 здесь и, похоже, работает. По крайней мере, это подтолкнет вас в правильном направлении.

Комментарии:

1. Здравствуйте, спасибо за ваше решение. Я хотел бы знать, может ли он обнаружить строку без http:// , например, как www.link.com ?

2. о черт, я предоставил вам неправильный код! Это для использования с BBCodes.. [URL]ссылка[/URL] будет преобразована. Я удалю этот ответ и предоставлю вам другой!

3. Добавлена замена. Это всего лишь код от Google, но он направляет вас в правильном направлении!

Ответ №2:

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

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

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

Ответ №3:

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

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

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

Комментарии:

1. ваше регулярное выражение допустимо только для доменов .com,.org и .net

2. Это плохо, что, если домен является .co.uk ? .ly? .co? Это приведет к сбою.