PHP bbcode解析器如何noparse一个标签?

时间:2014-10-28 11:05:37

标签: php bbcode

这是我的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;自动链接。

但是,我有一些问题,我无法修复它。

  1. 如果有效第16行和第25行

    //'~\[code\](.*?)\[/code\]~s'
    //'<div class="code_box">$1</div>'
    
  2. 将解析器[code] [b] text [/ b] [/ code]标记内容转换为storng

    1. 如果没有激活第31行和第54行....我无法设置其CSS样式

    2. 现在现有的代码只能noparse BBcode (不能跳过代码),每个人都可以建议更多的智能代码来跳过所有内容......?

0 个答案:

没有答案