使用PHP语法突出显示所有<code>s on a page... ($highlight_string() isn&#39;t an option)</code>

时间:2010-02-22 20:24:08

标签: php codeigniter syntax-highlighting preg-replace

我正在使用CodeIgniter和highlight_code("$string");More info)函数来为动态网站提供语法突出显示。我希望用户能够提交自己的以BBCode风格格式编写的帖子。我正在使用NBBC PHP library

我的问题是,无论我如何做到这一点,我无法让NBBC语法高亮显示我的用户输入的[code][/code]标签。这是[代码]的PHP:

'code' => Array(
'mode' => BBCODE_MODE_ENHANCED,

'template' => "\n<div class=\"bbcode_code\">\n<p>Code:</p>\n<code><?php $highlight_code(\"?>{\$_content/v}<?php \");?></code>\n</div>\n",
'class' => 'code',
'allow_in' => Array('listitem', 'block', 'columns'),
'content' => BBCODE_VERBATIM,
'before_tag' => "sns",
'after_tag' => "sn",
'before_endtag' => "sn",
'after_endtag' => "sns",
'plain_start' => "<div id=\"footer\">",
'plain_end' => "</div>",
'simple_start' => '\n<div class=\"bbcode_code\">\n<p>Code:</p>\n<code>',
'simple_end'   => '</code>\n</div>\n',
),

如果你看到我在那里打<?php $highlight_code(\"?>{\$_content/v}<?php \");?>的行,我认为这会突出显示标签中包含的代码。我不记得这个输出是什么(我已经尝试了很多不同的组合)但是我得到的最接近的是它是从PHP导出的文本 - 在我的页面XHTML源代码中它只是作为文本出现。

我可以做些什么来制作 tags on a page be syntax-highlighted, ideally using highlight_code($string); or similar?

I was thinking preg_replace would be an option but I don't know how to do it to dynamically replace everything between outputted 标签内的所有内容(不是[代码],请记住,但是NBBC输出的HTML)。

1 个答案:

答案 0 :(得分:1)

首先使用preg_match提取[code] [/ code]标签的内容,并使用highlight_code()。

使用结果以高亮显示的代码preg_replace()原始字符串中的代码区域。伪代码肥胖型:

$code = preg_match(/code pattern/, $string);
$code = highlight_code($code);
$string = preg_replace(/code pattern/, $code, $string);

希望它有效。