有沒有辦法在PHP中搜索像[b][/b]
這樣的bbcode。一種剝離不完整bbcode的方法?
例如,他們沒有結束標籤?假設用於在電子郵件訂閱中顯示文字回覆的摘要,請將其剪下至x characters
可能會中斷BB-Code
將其打開?
與PHP一起使用。
有沒有辦法在PHP中搜索像[b][/b]
這樣的bbcode。一種剝離不完整bbcode的方法?
例如,他們沒有結束標籤?假設用於在電子郵件訂閱中顯示文字回覆的摘要,請將其剪下至x characters
可能會中斷BB-Code
將其打開?
與PHP一起使用。
你可以Parse bbcode字符串。它非常複雜,但您可以實施樸素算法來提供句法分析。這樣,你就可以得到像在標籤關閉未關閉的標籤或錯誤的順序所有的錯誤,例如:
[b]
[i]
[/b]
[/i]
最簡單的方法:
[b], [i] etc
)我寫了一個函數,告訴你在字符串內是否有一些未封閉的bb標籤。雖然它無法說明位置,但它告訴哪些標籤有錯誤,因此更容易找到它們。它還發現複雜的BB-標籤,如[URL =東西] 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]'? – h2ooooooo