Блог

Как в php конвертировать BB коды в HTML

Класс с говорящим названием BBCode. Скачать его можно с моего сайта.

Если вы используете автозагрузку классов, то класс уже будет доступен для работы и ничего делать больше не надо. В противном случае файл нужно подключить

include "class.bbcode.php";
У класса есть всего один статичный публичный метод

BBcode::parse()
На вход подается текст с bb кодами, на выходе получаем валидный html. К примеру так

echo BBcode::parse('[b]Привет мир!!![/b]'); // Привет мир!!!
На этом заметку можно было бы завершить. Но этот сайт не про то, как «подключили готовый скрипт и радуемся». В форме комментариев ниже, вы можете заметить, что помимо стандартных bb кодов, перечисленных в википедии, доступны еще два кода: php и js. Так уж получается, что блог по большей части посвящен этим двум языкам. Их поддерживает система подсветки. 

Такие коды, класс априори не поддерживает. Но мы программисты, и руки растут откуда надо. Поэтому добавим их поддержку сами. 

Класс работает (неожиданно)  на регулярных выражениях. Есть массив $simple_search, который содержит регулярные выражения, описывающие простые bb коды(b, i,u...) .

Никаких ухищренных защит в коде кстати нет. Простор для хакеров. Вам поможет узнать ip адрес сайта этот ресурс. И запустить для него парсер.

Здесь же находим строку  '/\[code\](.*?)\[\/code\]/is',

в соседнем массиве $simple_replace  этот код имеет соответствие для замены '$1',

Этого достаточно, чтобы включить поддержку своих кодов. Добавляем в конец $simple_search

'/\[php\](.*?)\[\/php\]/is',
'/\[js\](.*?)\[\/js\]/is',
а в конец $simple_replace '$1','$1',

Готово. Подсветку кода на блоге делает Syntax Highlighter, соответственно в вашем случае замена может быть слегка иной, но принцип будет тем же.

Замечу, что скрипт никак не защищает содержимое ваши bb тегов от html. Это нужно сделать самому. Чтобы никто не смог ввести в комментарий html я сделал так

$content = bbcode::parse(htmlspecialchars($content));
И еще один глюк, связанный непосредственно с Syntax Highlighter. Он показывает
переносы строк. это я решил так. В класс добавляем замену.

// Parse bbcode

$s = preg_replace(self::$simple_search, self::$simple_replace, $s);
while(preg_match('/(]*>[^<]*)(.*<\/pre>)/Uuis',$s)) $s = preg_replace('/(]*>[^<]*)(.*<\/pre>)/Uuis',"$1$2",$s);

Средний рейтинг 0

phpRegExp

Комментарии:

Avatar ASDAF Гость 14 апр 2024
проблема тут в том, что ни вы ни ученики не понимаю%u04

16+ Сайт может содержать контент, не предназначенный для лиц младше 16 лет