我在php中使用preg编码了一下,所以我可以自己编写一些bbcodes。
一开始效果不错,但我发现当我做[b]Stuff stuff [b]and more stuff[/b][/b]
这样的事情时,它的输出就像东西[b]和更多东西 [/ b]
因为我无法做到的是让它找到所有关闭标签中的最后一个[b] [/ b]主要是为了消除这个问题,但似乎对我没有任何作用
代码正在运行
$bbcode = "[b]Stuff stuff [b]and more stuff[/b][/b]";
$bb[] = "#\[b\](.*?)\[/b\]#i";
$html[] = "<b>\\1</b>";
$bbcode = preg_replace($bb, $html, $bbcode);
return $bbcode;
我尝试通过制作另一行
来提供类似东西和更多东西的输出$bbcode = "[b]Stuff stuff [b]and more stuff[/b][/b]";
$bb[] = "#\[b\]#i";
$html[] = "<b>";
$bb[] = "#\[/b\]#i";
$html[] = "</b>";
$bbcode = preg_replace($bb, $html, $bbcode);
return $bbcode;
但是这并没有停止执行任何像死角[/ b]那样的死胡同标签 关于如何找到第一个[b]和最后一个[/ b]而不与其他新的开放标签发生碰撞的任何想法?
答案 0 :(得分:0)
对于bbcode替换的这种特殊情况,一种简单的方法是将[b]
替换为<b>
,将[/b]
替换为</b>
,而不是尝试捕获内部的内容。
使用str_ireplace:
$source = str_ireplace(array('[b]', '[/b]'), array('<b>', '</b>'), $source);
或使用preg_replace:
$source = preg_replace('~\[(/?b)]~i', '<$1>', $source);