有没有办法在 php 中搜索 bbcode 之类的[b][/b]
.
例如,他们没有结束标签?说在电子邮件订阅中显示文本回复的片段被削减到x characters
可能会被切断BB-Code
而使其保持打开状态?
与 PHP 一起使用。
您可以解析bbcode 字符串。它相当复杂,但您可以实现简单的算法来提供句法分析。通过这种方式,您可以获得所有错误,例如未关闭的标签或标签关闭中的错误顺序,例如:
[b]
[i]
[/b]
[/i]
最简单的方法:
[b], [i] etc
)我写了一个函数,它会告诉你字符串中是否有一些未闭合的 bb-tags。虽然它不能告诉位置,但它会告诉哪些标签有错误,因此更容易找到它们。它还可以找到复杂的 bb-tags,例如 [url=something]urlname[/url]
<?PHP
$test_string = "
[b]bold ok[/b]
[b]bold unclosed[b]
[i]italic unclsed[i]
[i]italic[/i]
";
echo checkBBCode($test_string);
//------------------------------------
function checkBBCode($str)
{
$result = "";
$taglist = array("b", "i", "u", "h1", "h2", "url"); //the bb-tags to search for
$result_array = array();
foreach($taglist as $tag )
{
// How often is the open tag?
preg_match_all ('/\['.$tag.'(=[^ ]+)?\]/i', $str, $matches);
$opentags = count($matches['0']);
// How often is the close tag?
preg_match_all ('/\[\/'.$tag.'\]/i', $str, $matches);
$closetags = count($matches['0']);
// how many tags have been unclosed?
$unclosed = $opentags - $closetags;
$unclosed = (int)$unclosed*-1; //force positive values
$result_array[] = $tag." :".$unclosed;
}
foreach($result_array as $check)
{
$result .= "\n\r<br>".$check;
}
return $result;
}
?>
我在 dreamincode.net 上发现了一个有用的脚本,它在前端有不同的工作方式,并通过突出显示不正确的标签来直观地显示它们。