这是我的bbcode解析器类: http://runnable.com/VE929Bgd9lRotkWp/bbcode-for-php
<?php
class BBCode {
public function __construct(){}
private function showBBcodes($text) {
$text = htmlspecialchars($text); //skip HTML
preg_match_all('#\[code\](.*?)\[/code]#is', $text, $stack);
// BBcode array
$find = array(
'~\[b\](.*?)\[/b\]~s',
'~\[i\](.*?)\[/i\]~s',
'~\[quote\](.*?)\[/quote\]~s',
//'~\[code\](.*?)\[/code\]~s'
);
// HTML tags to replace BBcode
$replace = array(
'<b>$1</b>',
'<i>$1</i>',
'</p><blockquote>$1</blockquote></p>',
//'<div class="code_box">$1</div>'
);
$text = nl2br(preg_replace($find,$replace,$text));
foreach($stack[1] as $t) {
$text = preg_replace('#\[code\].*?\[/code]#is', $t, $text,1);
}
return $text;
}
// Smiley to image
private function parseSmiley($text){
// Smiley to image
$smileys = array(
':wave:' => 'wave.gif',
':hahaha:' => 'hahaha.gif',
':help:' => 'help.gif'
);
// Now you need find and replace
foreach($smileys as $smiley => $img){
$text = str_replace(
$smiley,
"<img src='images/smiley/{$img}' alt='{$smiley}'/>",
$text
);
}
// Now only return it
return $text;
}
public function parser($message){
$parser_content = $message;
$parser_content = $this->showBBcodes($parser_content);
$parser_content = $this->parseSmiley($parser_content);
return $parser_content;
}
}
这个类可以BBcode解析&amp;笑脸形象&amp;自动链接。
但是,我有一些问题,我无法修复它。
如果有效第16行和第25行
//'~\[code\](.*?)\[/code\]~s'
//'<div class="code_box">$1</div>'
将解析器[code] [b] text [/ b] [/ code]标记内容转换为storng
如果没有激活第31行和第54行....我无法设置其CSS样式
现在现有的代码只能noparse BBcode (不能跳过代码),每个人都可以建议更多的智能代码来跳过所有内容......?