Php 一种去除不完整bbcode的方法?
在php中有没有一种方法可以搜索像Php 一种去除不完整bbcode的方法?,php,regex,Php,Regex,在php中有没有一种方法可以搜索像[b][/b]这样的BBCode 例如,他们没有结束标记的地方?比如说,在电子邮件订阅中显示文本回复片段,减少到x个字符可能会关闭BB code而不打开它 与PHP一起使用。您可以使用bbcode字符串。它相当复杂,但您可以实现naive算法来提供语法分析。通过这种方式,您可以获得所有错误,如未关闭的标记或标记关闭顺序错误,例如: [b] [i] [/b] [/i] 最简单的方法是: 准备标签列表([b]、[i]等) 搜索第一个标记并将其添
[b][/b]
这样的BBCode
例如,他们没有结束标记的地方?比如说,在电子邮件订阅中显示文本回复片段,减少到x个字符
可能会关闭BB code
而不打开它
与PHP一起使用。您可以使用bbcode字符串。它相当复杂,但您可以实现naive算法来提供语法分析。通过这种方式,您可以获得所有错误,如未关闭的标记或标记关闭顺序错误,例如:
[b]
[i]
[/b]
[/i]
最简单的方法是:
[b]、[i]等
)[b]
[i]
[/b]
[/i]
最简单的方法是:
[b]、[i]等
)我写了一个函数,它会告诉你字符串中是否有一些未关闭的bb标记。虽然它不能告诉位置,但它能告诉哪些标签有错误,所以更容易找到它们。它还可以找到复杂的bb标记,如[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上发现了一个有用的脚本,它有一种不同的方法在前端工作,并通过突出显示来直观地显示不正确的标记
我编写了一个函数,它将告诉您字符串中是否有一些未关闭的bb标记。虽然它不能告诉位置,但它能告诉哪些标签有错误,所以更容易找到它们。它还可以找到复杂的bb标记,如[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上发现了一个有用的脚本,它有一种不同的方法在前端工作,并通过突出显示来直观地显示不正确的标记
这根本不容易-考虑这个代码,例如:<代码>我的文本[b]粗体文本[b]更大胆的文本[/b] < /代码>。什么应该是粗体文本,什么不应该?如果我的文本[B]粗体文本[B]更大胆的文本[/B] [/B] < /代码>,我的文本[B]粗体文本[/B] [B]更大胆的文本[/B] < /代码>或<代码>我的文本粗体文本[B]更大胆的文本[/B] < /代码> -这不容易——考虑这个代码例如:<代码>我的文本[B]粗体文本[B]更大胆的文本[/B] < /代码>。什么应该是粗体文本,什么不应该?应该是
我的文本[b]加粗文本[b]加粗文本[/b][b]
,我的文本[b]加粗文本[/b][b]加粗文本[/b]
还是我的文本加粗文本[b]加粗文本[/b]
?