Я хочу отобразить трассировку исключения в странице HTML.
Один способ сделать это должно выйти из специальных символов HTML в трассировке исключения и вывести его в <pre>
тег.
Хотя это работает, это ужасно неэффективно. Я думал, что один подход должен будет перенести трассировку с CDATA. Я попробовал его, но ничто не добирается, отобразился.
Мой вопрос, это может быть сделано?
Вот моя слабая попытка.
<pre><![CDATA[blah, blah, blah with <>
and blah blah blah with &
and more blah, blah]]></pre>
Это будет работать, только если вы передаете страницу в формате XML (application/xhtml+xml
); в обычном HTML нет секций CDATA. Большинство браузеров в режиме HTML просто проигнорируют пример раздела CDATA.
И бросаем ...
]]>
вокруг строки недостаточно, чтобы обернуть ее. Если бы в вашей трассировочной информации была последовательность ]]>
, то секция CDATA закончилась бы, и вы вернулись бы к той же проблеме. Поэтому вам придется сделать по крайней мере одну экранировку, чтобы справиться с этим случаем, и если вы все равно собираетесь делать экранирование, то лучше сделать правильный HTML-escape.
Вот почему секции CDATA в значительной степени бессмысленны. Многие люди думают, что это каким-то образом освобождает их от необходимости думать о вопросах экранирования, но на самом деле это не так.
В любом случае, HTML-эскейпинг не является неэффективным. Это пара замен строк. Любое веб-приложение (*) будет делать сотню HTML-escaping на каждой странице. Добавление еще одного - особенно для отладки, где эффективность не имеет значения! - не является большой нагрузкой.
(*: ну, кроме плохо написанных приложений из учебников PHP, авторы которых даже не слышали о htmlspecialchars
, очевидно)
Да, но только в XHTML (теоретически я думаю, что он должен работать в HTML, но веб-браузеры работают с супом тегов, а не с HTML 4.x), а не в том случае, если вы обслуживаете документ как text / html (что вам необходимо если вы хотите, чтобы он работал с Internet Explorer).
Что касается эффективности, замена <
, &
и >
соответствующими объектами является тривиальной операцией на любом языке программирования (или текстовом редакторе с средство поиска и замены), который не добавляет значительное количество байтов, за исключением условий чрезвычайно ограниченной пропускной способности.