我在一个用 PHP 编写的网站上为我自己的个人论坛编写了一个 Quote 函数。
消息引用的标签看起来像[quote=username]message[/quote]
,所以我写了这个函数:
$str=preg_replace('#\[quote=(.*?)\](.*?)\[/quote\]#is', '<div class="messageQuoted"><i><a href="index.php?explore=userview&userv=$1">$1</a> wrote :</i>$2</div>', $str);
如果报价为一,则此方法有效,但随后用户引用报价,则无效。所以我需要一种递归引用来应用这种行为。
我试图搜索这么多主题,但我真的不明白它是如何工作的。对于进行此类操作的任何建议/提示,我们将不胜感激!让我知道,谢谢!
编辑
最后,这是我自己的解决方案:
if(preg_match_all('#\[quote=(.*?)\](.*?)#is', $str, $matches)==preg_match_all('#\[/quote\]#is', $str, $matches)) {
array_push($format_search, '#\[quote=(.*?)\](.*?)#is');
array_push($format_search, '#\[/quote\]#is');
array_push($format_replace, '<div class="messageQuoted"><a class="lblackb" href="index.php?explore=userview&userv=$1">$1</a> wrote :<br />$2');
array_push($format_replace, '</div>');
}
$str=preg_replace($format_search, $format_replace, $str);
它仅在出现次数正确时才会替换。所以它应该(对吗?)防止 html 被破坏或其他恶意攻击。你怎么看?