У меня есть функция, которая преобразует строки, такие как «www.example.com» и « http://example.com » в гиперссылки. Он также касается субдоменов, например « http://sub.example.com ».
Но это не удается с этим – http: // www .example.com 'и выводит следующие
<a href="http://<a href="http://www.chemica.ru">www.chemica.ru</a>">http://<a href="http://www.chemica.ru">www.chemica.ru</a></a>
Пожалуйста, может кто-нибудь помочь? Проблема в том, что и «http: //», и «www». вместе, и оба имеют разные способы преобразования.
function makeLinks($text){ $text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)', '<a href="\\1">\\1</a>', $text); $text = eregi_replace('(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)', '<a href="http://\\1">\\1</a>', $text); $text = eregi_replace('([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[az]{2,3})', '<a href="mailto:\\1">\\1</a>', $text); return $text; }
просто напишите на страницу вашего просмотра (вам не нужна какая-либо библиотека или вспомогательная функция):
$text = "Good Site is http://masalahkita.com"; $link = preg_replace("/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i","<a target=\"_blank\" href=\"$1\">$1</a>", $text); echo $link;
Возможно, вы захотите прочитать это сообщение в блоге Яна Гойваертса для некоторых идей о том, как найти URL-адреса в тексте.
Чтобы решить вашу непосредственную проблему, вы можете добавить отрицательный lookbehind ко второму регулярному выражению: (?<!http://)(www.[-a-zA-Z0-9@:%_\+.~#?&/=]+)
гарантирует, что www...
будет соответствовать только, если ему не предшествует http://
.
Однако функции ereg
устарели и не поддерживают поиск, поэтому вам нужно будет использовать preg_replace()
.
$text = preg_replace('/(?<!http:\/\/)(www.[-a-zA-Z0-9@:%_\+.~#?&\/=]+)/i', '<a href="http://\1">\1</a>', $text);
должно сработать.
Для 'http://'
и 'www.'
вместе вы можете сделать что-то вроде этого :
$text = "http://www.example.com is a nice site"; $link = preg_replace("/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i","<a target=\"_blank\" href=\"$1\">$1</a>", $text); echo $link;
Работы для URL-адресов начинаются с http: //