1

我的网站最近爆了,因为 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);
4

1 回答 1

1

例如:

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

*+ 表示零次或多次(所有格

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

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

于 2013-06-29T13:48:26.557 回答