好的,基本上我想做的是在不使用正则表达式的情况下创建一种 BB 代码系统。我在下面使用的代码似乎可以完美运行,尽管它不是。基本上,代码应该采用一个字符串并从所有 [code][/code] 块中删除所有中断标记,并将其替换回整个字符串。然后代码应该将 [code][/code] 标签转换为我正在使用的 SyntaxHighlighter 脚本的“pre”标签。
不幸的是,代码并不能完全 100% 工作。在某些情况下,它仍会将中断标记留在 [code][/code] 块内。我的代码是:
<?php
$string = "Hello\n[code]\nCode One\n[/code]\n[code]\nCode Two\n[/code]\n[code]\nCode Three\n[/code]";
$string = nl2br($string);
$openArray = array();
$closeArray = array();
$original = "";
$newString = "";
$i = 0;
if(strpos($string, "[code]") === 0) {
array_push($openArray, 0);
}
while($i = strpos($string, "[code]", $i + 1)) {
array_push($openArray, $i);
}
while($i = strpos($string, "[/code]", $i + 1)) {
array_push($closeArray, $i + 7);
}
for($j = 0; $j < count($openArray); $j++) {
$length = $closeArray[$j] - $openArray[$j];
$original = substr($string, $openArray[$j], $length);
$newString = strip_tags($original);
$string = str_replace($original, $newString, $string);
}
$string = str_replace("[code]", '<pre class="brush: plain">', $string);
$string = str_replace("[/code]", '</pre>', $string);
echo $string;
?>
非常感谢所有答案,因为我一直想知道这有什么问题已经有一段时间了,我尝试了许多不同的方法!