我需要帮助将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-]+\.)+[a-z]{2,3})',
'<a href="mailto:\\1">\\1</a>', $text);
return $text;
}
(它将文本链接和电子邮件转换为超链接,以便用户可以单击它们)
答案 0 :(得分:6)
首先看一下手册中POSIX和PCRE表达式之间的list of differences。
如果您的表达式并不复杂,通常意味着只需在$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-]+\.)+[a-z]{2,3})/i',
'<a href="mailto:\\1">\\1</a>', $text);
return $text;
}
注意模式周围的/
个字符,以及分隔符后面的i
标记。我快速测试了这个,它适用于基本URL。你可能想要更彻底地测试它。