Можно ли использовать CDATA внутри тега <pre> - PullRequest
8 голосов
/ 30 апреля 2010

Я хочу отобразить трассировку исключений на странице HTML.

Один из способов сделать это - экранировать специальные символы HTML в трассировке исключений и поместить их в тег <pre>.

Хотя это работает, это ужасно неэффективно. Я думал, что одним из подходов будет завернуть след с CDATA. Я пробовал, но ничего не отображается.

Мой вопрос, это можно сделать?

Вот моя слабая попытка.

<code>  <pre><![CDATA[blah, blah, blah with <>
  and blah blah blah with &
    and more blah, blah]]>

Ответы [ 2 ]

10 голосов
/ 30 апреля 2010

Это будет работать, только если вы обслуживаете страницу как XML (application/xhtml+xml); нет разделов CDATA в простом HTML. Большинство браузеров в режиме HTML просто игнорируют пример раздела CDATA.

И бросить <![CDATA[ ... ]]> вокруг строки недостаточно, чтобы ее обернуть. Если бы в вашей информации о трассировке была последовательность ]]>, это закончило бы раздел CDATA, и вы вернулись бы к той же проблеме. Таким образом, вам нужно сделать хотя бы один выход, чтобы справиться с этим делом, и если вы все равно собираетесь выполнять процесс выхода из строя, вы также можете сделать правильный HTML-выход.

Вот почему разделы CDATA в значительной степени бессмысленны. Многие люди думают, что это как-то освобождает их от мысли о том, чтобы избежать проблем, но на самом деле это не так.

В любом случае, экранирование HTML не является неэффективным. Это пара строк заменяет. Любое веб-приложение (*) будет выполнять сотню HTML-переходов на каждой странице. Добавление еще одного - особенно для случая отладки, где эффективность не имеет значения вообще! - это не большое бремя.

(*: хорошо, за исключением плохо написанных приложений из учебников по PHP, авторы которых, очевидно, даже не слышали о htmlspecialchars.)

1 голос
/ 30 апреля 2010

Да, но только в XHTML (теоретически, я думаю, что он должен работать в HTML, но веб-браузеры работают с теговым супом, а не с HTML 4.x), а не если вы используете документ как text / html (который вы должны если вы хотите, чтобы он работал с Internet Explorer).

Что касается эффективности, замена <, & и > их соответствующими объектами является тривиальной операцией на любом языке программирования (или текстовом редакторе с функцией поиска и замены), который не добавляет значительное количество байтов, кроме как в условиях крайне ограниченной пропускной способности.

...