#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? Это приведет к сбою.