【问题标题】:Detect code for GeSHiGeSHi 的检测代码
【发布时间】:2013-01-20 18:45:28
【问题描述】:

我正在使用 PHP + MySQL 从头开始​​制作博客,有时我会在其中发布几行 PHP 代码用于教程等...所以,我在我的项目中安装了 GeSHi 类。 但是由于我会以普通文本格式写博客/文章,所以我会写一些教程,例如:

Here is some PHP code:
[code=php]
<?php
echo 'Hello World!';
?>
[/code]

这将以 TEXT 格式存储在我的 MySQL DB 中,那么如何设置 PHP 以识别代码并使用 GeSHi 类对其进行解析?

【问题讨论】:

    标签: php text blogs geshi


    【解决方案1】:

    你可以通过简单的regular replace做到这一点:

    function code($match) {
        $geshi = new GeSHi($match[2], $match[1]);
        return $geshi->parse_code();
    }
    $html = preg_replace_callback('~\[code=(.+?)\](.+?)\[\/code\]~is', 'code', $text);
    

    【讨论】:

      【解决方案2】:

      有两种方法:

      最简单但更糟糕:

      preg_replace_callback('#\[code=([a-zA-Z]+)](.+)\[/code]#sU',function($matches){
          $geshi = new GeShi($matches[1]);
           return $geshi->parse($matches[2]);
          },
       $text    );
      

      难度稍大,但相当高效且具有适应性:

      http://php.net/manual/fr/book.bbcode.php

      $bbcodeContainer = bbcode_create(array(
      ''=>         array('type'=>BBCODE_TYPE_ROOT,  'childs'=>'!i'),
      'i'=>        array('type'=>BBCODE_TYPE_NOARG, 'open_tag'=>'<i>',
                      'close_tag'=>'</i>', 'childs'=>'b'),
      'url'=>      array('type'=>BBCODE_TYPE_OPTARG,
                      'open_tag'=>'<a href="{PARAM}">', 'close_tag'=>'</a>',
                      'default_arg'=>'{CONTENT}',
                      'childs'=>'b,i'),
      'img'=>      array('type'=>BBCODE_TYPE_NOARG,
                      'open_tag'=>'<img src="', 'close_tag'=>'" />',
                      'childs'=>''),
      'b'=>        array('type'=>BBCODE_TYPE_NOARG, 'open_tag'=>'<b>',
                      'close_tag'=>'</b>'),
       ));
      
      bbcode_add_element($bbcodeContainer,'code',array('type'=>BBCODE_TYPE_OPTARG,
               'open_tag'=>'<div class="code">','close_tag'=>'</div>',
               'content_handling'=>function($content,$params){
                      $geshi = new GeShi($params[0]);
                      return $geshi->parse($content);   
                  }));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-19
        • 2015-09-29
        • 1970-01-01
        • 1970-01-01
        • 2011-05-19
        • 1970-01-01
        • 2012-06-10
        • 1970-01-01
        相关资源
        最近更新 更多