9

HTML ページに例外トレースを表示したい。

これを行う 1 つの方法は、例外トレースで HTML 特殊文字をエスケープし、<pre>タグ内にダンプすることです。

機能しますが、非常に非効率的です。1 つのアプローチは、トレースを CDATA でラップすることだと思いました。試してみましたが、何も表示されません。

私の質問は、これを行うことができますか?

これが私の弱い試みです。

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

2 に答える 2

10

application/xhtml+xmlページを XML ( )として提供している場合にのみ機能します。プレーンな HTML には CDATA セクションはありません。HTML モードのほとんどのブラウザーは、例の CDATA セクションを無視します。

<![CDATA[とにかく、文字列の周りに...を投げる]]>だけでは、それをラップするには不十分です。トレース情報にシーケンス]]>が含まれている場合、CDATA セクションが終了し、同じ問題が発生します。したがって、その場合に対処するには、少なくとも 1 つのエスケープを実行する必要があります。とにかくエスケープ プロセスを実行する場合は、適切な HTML エスケープを実行することもできます。

これが、CDATA セクションがほとんど無意味な理由です。多くの人は、問題を回避することを考える必要がなくなると考えているようですが、実際にはそうではありません。

とにかく、HTML エスケープは非効率的ではありません。数回の文字列交換です。どの Web アプリ (*) も、ページごとに 100 回の HTML エスケープを実行します。もう 1 つ追加します — 特に、効率がまったく問題にならないデバッグの場合に! — 大きな負担ではありません。

(*: まあ、作成者がhtmlspecialchars.

于 2010-04-30T19:03:28.870 に答える
2

はい、ただし XHTML でのみ (理論的には HTML で動作するはずですが、Web ブラウザーは HTML 4.x ではなくタグスープを扱います)、文書を text/html として提供する場合はそうではありません (必要に応じてこれを行う必要があります)。 Internet Explorer で動作するようにします)。

効率に関する限り<&>をそれぞれのエンティティに置き換えることは、任意のプログラミング言語 (または検索と置換機能を備えたテキスト エディター) での簡単な操作であり、非常に限られた帯域幅の条件を除いて、かなりの数のバイトを追加しません。 .

于 2010-04-30T18:48:19.630 に答える