Использование PHP для синтаксического выделения всех <code>s на странице ... ($ highlight_string () не вариант) - PullRequest
1 голос
/ 22 февраля 2010

Я использую CodeIgniter вместе с функцией highlight_code("$string"); ( Подробнее ) для подсветки синтаксиса для динамического сайта. Я хочу, чтобы пользователи могли отправлять свои собственные сообщения, написанные в формате BBCode. Для этого я использую библиотеку NBBC PHP .

Моя проблема в том, что, как я это делаю, я не могу заставить NBBC выделять только синтаксис [code][/code] тегов, которые вводят мои пользователи. Вот PHP для [code]:

'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?</p> <p>I was thinking <code>preg_replace был бы вариантом, но я не знаю, как это сделать, чтобы динамически заменить все между выводимыми тегами (не [code], помните, но HTML, который Выходы NBBC).

1 Ответ

1 голос
/ 22 февраля 2010

Сначала используйте 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);

Надеюсь, что это работает.

...