У меня есть ситуация, когда клиент использует php4 и не похож на PEAR. Есть ли установленный парсер PHP BBCode, который будет работать с системой BBCode vBulletin?
Мне просто нужно преобразовать BBCode в HTML. Это перенос данных из vBulletin на новую платформу, поэтому я не могу использовать парсер vBulletin для BBCode.
Docs:
http://www.vbulletin.com/forum/misc.php?do=bbcode
Вот на 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