2012-01-11 54 views
1

我需要在顯示網頁上的內容之前轉義一些文本,並且這實際上正在正確完成。但是,當我在html中顯示字符串時,轉義字符仍將顯示。下面是這樣一個例子:爲什麼在HTML中顯示轉義字符?

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

,並逃避相應的字符串如下:

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

我讀的地方,在標籤庫的核心只會逃避基本的如> ,<,「,\ 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 2012-01-11 23:04:13

+0

@BalusC是的,那就是那個 – ict1991 2012-01-11 23:05:33

+0

好的,你應該明確地提及並標記這一點。 「Java」是一個非常廣泛的主題,「taglib」不夠具體。那麼,至於你的具體問題,我不明白爲什麼這是一個問題。您可能會看到它們在生成的HTML源代碼中被轉義,但您應該在瀏覽器視圖中正確地看到所需的字符。請詳細說明具體問題。 – BalusC 2012-01-11 23:06:38

回答

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

刪除此出現問題。你不需要它。 JSTL <c:out>已經完成了這項工作。

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

您的HTML字符串會以其他方式轉義兩次。每個&再次成爲&amp;等等。 如果你真的需要在自己的手中逃逸那麼就不要使用<c:out>都(爲什麼?):

${someBean.someProperty} 

或關閉其逃逸的escapeXml="false"

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

哦,好吧我想我是逃避它兩次然後....我不知道,C:出逃逸以及 – ict1991 2012-01-11 23:24:46

+0

thnaks的幫助 – ict1991 2012-01-11 23:27:10

+0

不客氣。爲了防止XSS攻擊,''的要點是HTML轉義用戶控制的輸入。另見http://stackoverflow.com/questions/2658922/xss-prevention-in-java – BalusC 2012-01-12 00:29:44

1

BalusC有搞定了。

一對夫婦的附加分:

  • 如果你得到的網頁不看的權利的問題,你應該做的事情之一是使用Web瀏覽器的「查看源文件」,在原始的HTML看功能。在這種情況下,它會顯示雙重逃跑,並更快地認識到問題所在。

  • 在HTML中,你應該只需要逃脫<>&。其他字符應該可以正常工作,只要您的HTML以UTF-8編碼(並且內容類型也如此)。

相關問題