Я пытаюсь разобрать строки, которые представляют исходный код, что-то вроде этого:
[code lang="html"]
<div>stuff</div>
[/code]
<div>stuff</div>
Как вы можете видеть из моих предыдущих 20 вопросов, я пытался сделать это с помощью функций регулярного выражения PHP, но столкнулся со многими проблемами, особенно когда строка очень большая ...
Ребята, вы знаете класс BB-парсера, написанный на PHP, который я могу использовать для этого вместо регулярных выражений?
Что мне нужно сделать, это:
- сможет конвертировать весь контент из тегов
[code]
с HTML-сущностями
- сможет запускать какой-то фильтр (мою функцию обратного вызова) только для содержимого вне тегов
[code]
спасибо
редактирование:
Я закончил, используя это:
преобразовать все теги <pre>
и <code>
в [pre] и [code]:
<code>str_replace(array('<pre>', '
',' ', '
'), массив (' [pre] ',' [/ pre] ',' [code] ',' [/ code] '), $ content);
получить содержимое между [code] .. [/ code] и [pre] ... [/ pre] и выполнить преобразование html-сущности
preg_replace_callback('/(.?)\[(pre|code)\b(.*?)(?:(\/))?\](?:(.+?)\[\/\2\])?(.?)/s', 'self::specialchars', $content);
(я украл этот шаблон из функций шорткода WordPress:)
сохранить содержимое, преобразованное объектами, во временную переменную массива и заменить одно из $content
уникальным идентификатором
Теперь я могу безопасно запускать свой фильтр на $content
, потому что в нем нет кода, только идентификатор (этот фильтр делает strip_tags для всего текста и преобразует такие вещи, как http://blabla.com
в ссылки)
заменить уникальные идентификаторы из $content
на преобразованные кодовые блоки из переменной массива
Как вы думаете, это нормально?