修复eregi_replace函数

时间:2013-06-29 13:43:53

标签: php regex eregi

我的网站最近因为eregi_replace逐渐退出而爆炸。现在我需要将它们转换为preg_replace或其他东西。这适用于我的大多数功能,但我遇到了模拟bbtags的问题。

有人可以帮忙吗?

$txt = eregi_replace("\\[url\\]([^\\[]*)\\[/url\\]", "<a href=\"\\1\" target=\"_blank\">\\1</a>", $txt);
$txt = eregi_replace("\\[img\\]([^\\[]*)\\[/img\\]", "<a href=\"\\1\"><img src=\"\\1\" width=\"150px\" height=\"150px\" style=\"float: left; margin-right: 10px;\" /></a>", $txt);
$txt = eregi_replace("\\[cimg\\]([^\\[]*)\\[/cimg\\]", "<a href=\"\\1\"><img src=\"\\1\" width=\"100px\" height=\"100px\" /></a>", $txt);
$txt = eregi_replace("\\[code\\]([^\\[]*)\\[/code\\]", "<br><br><strong>Code:</strong><table width=\"80%\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" bgcolor=\"#FFFFFF\" style=\"border:1px solid gray;\"><tr><td bgcolor=\"#FFFFFF\"><font color=\"#009900\" size=\"-2\">\\1</font></td></tr></table><br>", $txt);

1 个答案:

答案 0 :(得分:1)

例如:

$txt = preg_replace('~\[url]([^[]*+)\[/url]~i', '<a href="$1" target="_blank">$1</a>', $txt);

*+表示零次或多次(possessive

注意:您无需转义方括号。您不需要转义字符类中的左方括号。使用简单的引号来包围你的字符串是最好的选择,因为你不必在内部转义双引号。

使用\[^]]代替点的兴趣在于您可以避免使用惰性量词.*?并获得更高效的模式。第二个问题是你避免了dotall问题,因为这个字符类匹配换行符。