Использование htmlentities с BBCode - PullRequest
0 голосов
/ 23 июня 2009

То, чего я пытаюсь добиться, - это разумный метод использования BBCode, но когда все остальные данные анализируются с помощью htmlentities (). Я думаю, что это должно быть возможно, я думал о том, чтобы взорваться вокруг [] символов, но я подумал, что может быть лучший путь.

Есть идеи?

1 Ответ

0 голосов
/ 23 июня 2009

htmlentities() не разбирает. Скорее, он кодирует данные, чтобы их можно было безопасно отображать в HTML-документе.

Ваш код будет выглядеть так:

  1. Разбор BB-кода (по какому-то механизму); пока не выполняйте экранирование, просто разберите входной текст на теги!
  2. Результатом вашего шага синтаксического анализатора будет некоторая древовидная структура, состоящая из узлов, представляющих теги блоков, и узлов, представляющих простой текст (текст между тегами).
  3. Отобразить дерево в выходной формат (HTML). На этом этапе вы экранируете обычный текст в своей структуре данных, используя htmlentities.

Ваша функция рендеринга будет рекурсивной. Некоторые псевдофункции, которые определяют отношения:

render( x : plain text ) = htmlentities(x)

render( x : bold tag )   = "<b>" . render( get_contents_of ( x )) . "</b>"

render( x : quote tag )  = "<blockquote>" . 
                           render( get_contents_of( x )) .
                           "</blockquote>"

...

render( x : anything else) = "<b>Invalid tag!</b>"

Итак, вы видите, htmlentities вступает в игру только тогда, когда вы выводите свой вывод в HTML, поэтому браузер не запутается, если ваш обычный текст должен содержать специальные символы, такие как <и>. Если бы вы рендерили в простой текст, вы бы вообще не использовали вызов функции, например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...