Мне нужна помощь в преобразовании eregi_replace в preg_replace (поскольку в PHP5 он обесценивается):
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-]+\.)+[az]{2,3})', '<a href="mailto:\\1">\\1</a>', $text); return $text; }
(Он превращает текстовые ссылки и электронные письма в гиперссылки, чтобы пользователь мог щелкнуть по ним)
Начните с просмотра различий между выражениями POSIX и PCRE в руководстве.
Если ваши выражения не являются сложными, обычно это означает, что вы можете уйти, просто наложив разделители вокруг вашего параметра $pattern
и переключитесь на использование семейства функций preg
. В вашем случае вы сделаете следующее:
function makeClickableLinks($text) { $text = preg_replace('/(((f|ht){1}tp:\/\/)[-a-zA-Z0-9@:%_\+.~#?&\/\/=]+)/i', '<a href="\\1">\\1</a>', $text); $text = preg_replace('/([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&\/\/=]+)/i', '\\1<a href="http://\\2">\\2</a>', $text); $text = preg_replace('/([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[az]{2,3})/i', '<a href="mailto:\\1">\\1</a>', $text); return $text; }
Обратите внимание на символы /
вокруг ваших шаблонов и флаг i
после разделителей. Я тестировал это быстро, и он работал для базового URL-адреса. Вероятно, вы захотите проверить его более тщательно.