不要使用此函数获取 BBCode,正如解释的那样。 如果您的文本超过 5000 个字符(平均),它将超出其限制并使您下载 PHP 页面。
根据此,您应该使用更高级但更复杂的工具。 您将需要一个名为“str_replace_once()”(搜索它)的函数,一个名为“countWord()”的函数,著名的“after()”、“before()”、“between()”。
str_replace_once 与 str_replace 相同,但只替换第一个匹配项。 至于 countWord,我想您知道如何计算单词出现次数。 至于 after、before 和 between,这是一个您可以在网站上轻松找到的用户函数。 否则,您可以自己编写。
以下函数能够处理所有块,假设 [code] 和 [/code],您可能希望父级之间的内容不被解析,包括 [code] 如果在另一个 [code] 内部。
<?php
function prepareCode($code, $op, $end)
{
$ix = 0;
$iy = 0;
$nbr_Op = countWord($op, $code);
while($ix < $nbr_Op)
{
if(in_string($op, before($end, $code), false))
{
$code = str_replace_once($op, substr($op, 0, -1).':'.$ix.']', $code);
$iy++;
}
elseif(in_string($end, before($op, $code), false))
{
$iy = $iy-1;
$code = str_replace_once($end, substr($end, 0, -1).':'.($ix-1).']', $code);
$ix = $ix-2;
}
$ix++;
}
while(in_string($end, $code))
{
$code = str_replace_once($end, substr($end, 0, -1).':'.($iy-1).']', $code);
$iy=$iy-1;
}
$code = preg_replace('#\\'.substr($end, 0, 1).':-[0-9]\]#i', '', $code);
if(in_string(substr($op, 0, -1).':0]', $code) && !in_string(substr($end, 0, -1).':0]', $code))
{
$code .= substr($end, 0, -1).":0]";
}
return $code;
}
?>
$code 返回整个文本的半格式化内容。 您只需将其用作
$code = prepareCode($code="您的文本", $op="[tag]" , $end="[/tag]");
然后只需替换父标签
str_replace("[tag:0]", "<tag>", $code);
str_replace("[/tag:0]", "</tag>", $code);
所以最后就像
[