Действительно ли возможно использовать CDATA внутри <пред> тег

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

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

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

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

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

  <pre><![CDATA[blah, blah, blah with <>
  and blah blah blah with &
    and more blah, blah]]></pre>
8
задан Alexander Pogrebnyak 30 April 2010 в 18:34
поделиться

2 ответа

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

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

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

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

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

.
10
ответ дан 5 December 2019 в 15:21
поделиться

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

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

1
ответ дан 5 December 2019 в 15:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: