6

HTML のエスケープは問題ありません。<>などは削除されます。

コメントタグ内のファイル名を出力しているという問題に遭遇しました。<!-- ${filename} -->

もちろん、逃げないと事態は悪化する可能性があるため、次のようになります。 <!-- <c:out value="${filename}"/> -->

問題は、ファイルの名前に「--」が含まれていると、すべての html が台無しになること<!-- -- -->です。

標準の html エスケープはこれらのダッシュをエスケープしません。誰かがそれらをエスケープするためのシンプルで標準的な方法に精通しているかどうか疑問に思っていました。

4

5 に答える 5

7

HTML コメントの定義:

コメント宣言は <! で始まり、その後に 0 個以上のコメントが続き、その後に > が続きます。コメントは「--」で開始および終了し、「--」は含まれません。

もちろん、コメントの解析はブラウザ次第です。

ここで明らかな解決策と思われるものは何もないので、それらの二重ダッシュを str_replace することをお勧めします。

于 2008-11-26T05:24:53.673 に答える
0

これを解決する良い方法はありません。コメントはプレーンテキストで読み取られるため、それらをエスケープすることはできません。ハイフンの間にスペースを入れるか、ハイフンに何らかのコードを使用する必要があります ( など[HYPHEN])。

于 2008-11-26T05:26:16.993 に答える
0

- 文字が 4 の倍数でない限り、html でこれらの文字をエスケープする普遍的な方法はありません。したがって、すべてはブラウザに依存します。たとえば、Internet Explorer 8 を見ると、これらの文字は適切にエスケープされており、問題ありません。同じことが Google の Chrome にも当てはまります...ただし、Firefox は最新のブラウザー (3.0.4) でさえ、これらの文字のエスケープをうまく処理しません。

于 2008-11-26T05:36:49.733 に答える
0

「--」を直接表示できないことは明らかなので、それらをエンコードするか、fn:escapeXml または fn:replace タグを使用して適切な置換を行うことができます。 JSTL ドキュメント

于 2008-11-26T05:40:48.680 に答える
0

HTML エスケープを試みるべきではありません。コメントの内容はエスケープできません。中身。

「--」はそれ自体が無関係の問題であり、実際には修正できません。正確な文字列を復元する必要がない場合は、単に置換を行ってそれらを取り除きます (例: '__' に置き換えます)。

コメントの内容を読み取る JavaScript にまったく邪魔されずに文字列を取得する必要がある場合は、文字列リテラルを使用します。

<!-- 'my-string' -->

スクリプトは eval(commentnode.data) を使用して読み取ることができます。(はい、ついに eval() の有効な使用法です!)

次に、エスケープの問題は、JS文字列リテラルに物事を入れる方法になります。これは、「」および「-」文字をエスケープすることでかなり簡単に解決できます。

<!-- 'Bob\x27s\x2D\x2Dstring' -->

(同じエスケープ スキームを使用して JS 文字列リテラルを < script> ブロックまたはインライン ハンドラー内に配置する場合は、おそらく '<'、'&'、および '"' もエスケープする必要があります。)

于 2008-11-26T13:52:28.140 に答える