Php 限制BBCode中的内容长度

Php 限制BBCode中的内容长度,php,regex,bbcode,Php,Regex,Bbcode,目前,我们正在使用以下代码将[b]…[/b]BBCode替换为..: $s=preg\u replace(“/\[b\]”((\s\.)+?)\[\/b\]/”、“\\1”、$s); 如果标记之间的内容太大,则PHP-FPM子项会因segfault而崩溃。由于我们允许用户编写足够大的文本,因此如果标签之间的内容超过一定长度,我们需要某种方法阻止PHP尝试替换它 如果有其他解决方案,请提出建议。我们当前的脚本内存限制是128M,这应该足够了。允许的最大文章长度为50000个字符。为什么(\s|)

目前,我们正在使用以下代码将[b]…[/b]BBCode替换为..

$s=preg\u replace(“/\[b\]”((\s\.)+?)\[\/b\]/”、“\\1”、$s);
如果标记之间的内容太大,则PHP-FPM子项会因segfault而崩溃。由于我们允许用户编写足够大的文本,因此如果标签之间的内容超过一定长度,我们需要某种方法阻止PHP尝试替换它


如果有其他解决方案,请提出建议。我们当前的脚本内存限制是128M,这应该足够了。允许的最大文章长度为50000个字符。

为什么
(\s|)+用于内容?使用
/(?s)\[b\](.+?)\[\/b\]/
/(?s)\[b\](.{1500000})\[\/b\]/
。也不需要双捕获组。更简单的方法是,
$s=preg\u replace('/\[(\/?b)\]/',''$s)这是一个很古老的代码,我在修改它时有很糟糕的经历。我现在使用的是
/\[b\](.+)\[\/b\]/
,问题似乎不再存在,从一定长度开始,BBCode根本就没有被解析。有人能解释一下原因吗?@Kazuo
与换行符不匹配。这就是为什么它在第二次没有崩溃/匹配
\s
与新行匹配,这就是作者将它们分组到
(\s|)
以匹配任何内容的原因。基本上,您可以使用
s
修饰符来缩短正则表达式并使其更干净。
$s = preg_replace("/\[b\]((\s|.)+?)\[\/b\]/", "<b>\\1</b>", $s);