php如何使用BBCode?

解决方案 »

  1.   

    BBCode扩展
      

  2.   

    bbPress插件BBcode效果预览:http://bbshowcase.org/forums/topic/new-bbpress-plugin-bbcode-lite/page/2
    插件下载地址:http://bbpress.org/plugins/topic/bbcode-lite/bbcode-lite.zip
    使用方法:
    1.下载文件并解压;
    2.将bbcode-lite.php上传到my-plugins文件夹;
    3.在后台插件里面激活。
      

  3.   

    BBCode是Bulletin Board Code的缩写,有译为「BB代码」者,属于轻量标记语言(Lightweight Markup Language)的一种,如字面上所显示的,它主要是使用在BBS、论坛、Blog等网络应用上。BBcode的语法通常为 [标记] 这种形式,即语法左右用两个中括号包围,以作为与正常文字间的区别。系统解译时遇上中括号便知道该处是BBcode,会在解译结果输出到用户端时转换成最为通用的HTML语法。
    BBcode有两个主要目的:
      1. 便利
      最为通用的HTML语法虽然已相当简单易懂,但仍需要一定时间学习后才能上手,因此BBcode采用更为直觉易学的语法,转换为HTML的工作则交由系统来代劳。
      2. 安全
      过去BBS、论坛、Blog也曾经设计开放HTML语法让用户使用,但却衍生出语法输入错误时造成整页排版错乱、有心人利用HTML语法进行XSS式的攻击与破坏等问题。由于BBcode的转换为系统机械式的行为,所以可以有效避免人为输入错误的问题,而BBcode为预先设计好的语法,也就是说意图以BBcode达成所有的HTML语法效果是不可能的,相当于一种语法过滤,如此便可避免所有可能发生的恶意破坏。
      BBcode并没有一个共同的标准,各个BBS、论坛、Blog等网络应用程序可能会有自己独创的BBcode,但基本上仍有一些语法因为被广泛采用而成为共通语法。
    如:<?php
    /*
     * Prepare the rule set 
     */
    $arrayBBCode=array(
        ''=>         array('type'=>BBCODE_TYPE_ROOT,  
                           'childs'=>'!i'),
        'b'=>        array('type'=>BBCODE_TYPE_NOARG, 
                           'open_tag'=>'<b>', 
                           'close_tag'=>'</b>'),
        'u'=>        array('type'=>BBCODE_TYPE_NOARG, 
                           'open_tag'=>'<u>', 
                           'close_tag'=>'</u>', 
                           'flags'=>BBCODE_FLAGS_SMILEYS_OFF),
        'i'=>        array('type'=>BBCODE_TYPE_NOARG, 
                           'open_tag'=>'<i>', 
                           'close_tag'=>'</i>', 
                           'childs'=>'b'),
    );
    /* 
     * Parsed Text
     */
    $text=<<<EOF
     No parse Test  :)
     Parsed, with smiley :( 
     Parsed, with no smiley :D 
    EOF;
    /*
     * Init the parser
     */
    $BBHandler=bbcode_create($arrayBBCode);
    /*
     * Add Smiley rules to parser
     */
    bbcode_add_smiley($BBHandler, ":)", "<img src=\"smiley.gif\" alt=\":)\" />");
    bbcode_add_smiley($BBHandler, ":(", "<img src=\"sad.gif\" alt=\":(\" />");
    bbcode_add_smiley($BBHandler, ":D", "<img src=\"happy.gif\" alt=\":D\" />");
    bbcode_add_smiley($BBHandler, ":p", "<img src=\"tong.gif\" alt=\":p\" />");
    bbcode_add_smiley($BBHandler, ":|", "<img src=\"special.gif\" alt=\":|\" />");
    bbcode_add_smiley($BBHandler, ":6:", "<img src=\"six.gif\" alt=\":6:\" />");
    /*
     * Parse the text
     */
    echo bbcode_parse($BBHandler,$text);
    ?> 以上例程会输出:<i> No parse Test </i> <img src="smiley.gif" alt=":)" />
    <b> Parsed, with smiley <img src="sad.gif" alt=":(" /> </b>
    <u> Parsed, with no smiley :D </u>
      

  4.   

    这个必须用一个栈来实现,array+strchr+substr_replace就足够实现bbcode了。。