Есть ли сильный синтаксический анализатор кода BB для PHP без зависимостей?

У меня есть ситуация, когда клиент использует php4 и не похож на PEAR. Есть ли установленный парсер PHP BBCode, который будет работать с системой BBCode vBulletin?

Мне просто нужно преобразовать BBCode в HTML. Это перенос данных из vBulletin на новую платформу, поэтому я не могу использовать парсер vBulletin для BBCode.

Docs:

http://www.vbulletin.com/forum/misc.php?do=bbcode

Solutions Collecting From Web of "Есть ли сильный синтаксический анализатор кода BB для PHP без зависимостей?"

Вот на HotScripts.com.

Обновите, чтобы ответить на критику (через три года после того, как вы приняли этот ответ), что это не содержало достаточного контента непосредственно в сообщении.

В настоящее время имя сценария «Рекрутинг-парсер (BBCode для HTML)».

Обновлена ​​ссылка от 11 февраля 2013 года.

Чтобы в будущем проверить ссылку, в случае ее снова сломать, я предлагаю использовать Google с поисковым термином BBCode для HTML php , как и в то время, когда я ответил на этот вопрос для вас. Или вы можете посетить HotScripts, чтобы попробовать свои навыки поиска в более целевой среде.

«Твердые»? Я вообще никогда не встречал сильного парсера BBcode. Все они кажутся свободной коллекцией неосторожного regexen, легко обманывают, позволяя атакам HTML-инъекций.

Например, один опубликованный John W может быть явно использован с несколькими тегами, включая:

[img]xxx" onerror="alert('JS injection!')[/img] 

плюс он позволяет javascript: и другим опасным URL-адресам, не удается избежать & , запрещает много URL-символов (включая % !), а случайно разрешает другим это не должно (автор не совсем понял, что делает escape-сбой в строке там), и он не может запретить ошибочные теги или теги, случайно вписанные в атрибуты других тегов … в основном это небезопасный беспорядок, и это соответствует курсу с парсерами bbcode.

Извините за бесполезный ответ (он был слишком большой, чтобы вписаться в комментарий).

ETA re comment: Хорошо, это не совсем модуль bbcode, похожий. Я разделил строки, удалил существующие управляющие символы, затем использовал байт 01 как суррогат для & , 02 для < и 03 для > , затем для каждого шага преобразования, используемого re.split on (\x02[^\x03]*\x03) и запускал заменяющее регулярное выражение на каждой второй части (без тегов), начиная с «самых внутренних» \x02html tags\x03 как \x02html tags\x03 и эмоций, затем работая наружу, используя образы к ссылкам и курсивную / \x02html tags\x03 разметку, вставляя \x02html tags\x03 мере ее \x02html tags\x03 . Затем, наконец, HTML-encode &<> и замените управляющие коды на &<> . Это останавливает разметку, которая сама помечается, что является большим источником уязвимостей в упрощенной разметке на основе регулярных выражений.

Подумайте об этом, я также написал фактический парсер bbcode на Python, но только в качестве быстрого взлома совместимости; он не предлагает всех возможностей полного bbcode. В частности, он запретил вложение любого тега диапазона (т. Е. Тега с тегом close) в любой другой тег диапазона. Это сравнительно легко реализовать, если это приемлемо, поскольку вы можете использовать однопроходное регулярное выражение для соответствия любому тегу и иметь заменяющую функцию, чтобы решить, как заменить на основе имени тега. например.:

 \[ (i|b|color|url|somethingelse) \=? ([^]]+)? \] (?: ([^]]*) \[\/\1\] ) 

(Это регулярное выражение VERBOSE поэтому пробелы предназначены только для удобства чтения. Насколько доступно любое регулярное выражение).

Удаление гнездования значительно упрощает количество угловых случаев.

Эта библиотека не требует PEAR и имеет некоторые трюки для предотвращения инъекций.

http://www.christian-seiler.de/projekte/php/bbcode/index_en.html