2012-01-11 8 views
1

ウェブページにコンテンツを表示する前に、何らかのテキストをエスケープする必要があります。これは実際に正しく行われています。しかし、文字列をhtmlで表示すると、エスケープ文字は表示されます。エスケープ文字がHTMLで表示されるのはなぜですか?

hello there my ni&%ame is + - && ! 

とエスケープとのそれぞれの文字列は以下の通りである:以下は、そのような例である

hello there my ni&%ame is + - && ! 

私はtaglibのコアだけな>などの基本的なものをエスケープすることをどこかで読みました、< "、\ t、およびスペースですが、これらのエスケープシーケンスはHTMLコードから削除されていません。この問題を解決する方法を知っている人はいらっしゃいますか?ありがとう

以下はコードの一部です特定の文字をその文字に変換するために使用されます文字をエスケープ:

while (character != CharacterIterator.DONE){ 
     if (character == '<') { 
      result.append("&lt;"); 
     } 
     else if (character == '>') { 
      result.append("&gt;"); 
     } 
     else if (character == '&') { 
      result.append("&amp;"); 


       } ..... 
     return result; 
} 

脱出パートが行われ、完全に動作している..私は、エスケープ文字で文字列を表示しようとすると、問題が発生したHTMLページに

+0

あなたはJSTLについて話していますか? – BalusC

+0

@BalusC yes thats the – ict1991

+0

さて、明示的に言及し、そのようにタグ付けする必要があります。 「Java」は非常に幅広いテーマであり、「taglib」は具体的ではありません。あなたの具体的な問題については、なぜそれが問題であるのかを見たり、理解しなかったりします。生成されたHTMLソースでそれらがエスケープされているのが見えるかもしれませんが、ブラウザの表示で目的の文字が正しく表示されるはずです。具体的な問題を詳述してください。 – BalusC

答えて

3
if (character == '<') { 
    result.append("&lt;"); 
} 
else if (character == '>') { 
    result.append("&gt;"); 
// ... 

これを削除します。あなたはそれを必要としません。 JSTL <c:out>は既にこの仕事をしています。

<c:out value="${someBean.someProperty}" /> 

その他の点では、HTML文字列は2回エスケープされます。それぞれ&&amp;になります。 あなたが本当に自分の手の中にエスケープを取るためにそしてちょうどすべてで<c:out>を使用していない必要がある場合は(なぜ?):

${someBean.someProperty} 

するか、オフにそのescapeXml="false"によってエスケープ:

<c:out value="${someBean.someProperty}" escapeXml="false" /> 
+0

オハイオ州オハイオ州私はそれを2回エスケープしていたと思う....私はc:アウトも同様にエスケープすることを知らなかった – ict1991

+0

ヘルプのthnaks – ict1991

+0

あなたは大歓迎です。 ' 'のポイントは、XSS攻撃を防ぐためにHTMLでエスケープされたユーザー制御の入力です。 http://stackoverflow.com/questions/2658922/xss-prevention-in-javaも参照してください。 – BalusC

1

BalusCが持っていますばっちり成功。

追加ポイントのカップル:

  • あなたがWebページを右に見ていないとの問題を取得する場合、あなたがすべきことの一つは、Webブラウザの「ソースの表示」を使用して、生のHTMLを見ることです関数。この場合、ダブルエスケープを示し、問題の内容をより迅速に認識することができました。 HTMLで

  • 、あなただけの<>&をエスケープするを必要とすべきです。あなたのHTMLがUTF-8でエンコードされていれば、他の文字もうまく動作するはずです(コンテンツタイプも同様です)。

関連する問題