2011-02-09 9 views
6

在HTML中輸出字符串時,出於可理解的原因,必須將特殊字符轉義爲HTML實體(「& <>」等)。當使用HTML實體轉義字符串時,如果我使用UTF-8,可以安全地跳過Unicode 127以上的編碼字符嗎?

我已經檢查了這兩個Java實現: org.apache.commons.lang.StringEscapeUtils.escapeHtml(字符串) net.htmlparser.jericho.CharacterReference.encode(CharSequence的)

兩個逃跑的所有字符上面的Unicode代碼點127(0x7F),它實際上是所有非英文字符。

這種行爲很好,但是當字符是非英文的時候,它產生的字符串是非人類可讀的(例如,希伯來文或阿拉伯文)。我已經看到,當Unicode 127以上的字符不會像這樣被轉義時,它們仍然可以在瀏覽器中正確顯示 - 我相信這是因爲html頁面是UTF-8編碼的,因此瀏覽器可以理解這些字符。

我的問題:如果我的網頁是UTF-8編碼,我可以在轉義HTML實體時安全地禁用代碼點127上方的轉義Unicode字符嗎?

回答

5

你只需要使用HTML實體在兩種情況下:

  • 能擺脫在HTML特殊意義的字符(如<
  • 要顯示不屬於文檔編碼的字符(例如,ISO-8859-1文檔中的符號)

鑑於UTF-8可以表示所有的Unicode字符,只有第一種情況適用。

當您手動輸入HTML時,如果您的編輯器和/或鍵盤不允許您鍵入某個字符,您可能會發現現在插入HTML實體是切實可行的(只需鍵入&copy;而不是試圖弄清楚鍵入實際的©),但是當自動轉義文本時,您只是使頁面大小增加;-)

我對Java知之甚少,但其他語言對編碼特殊字符和所有可能的實體有不同的功能。

4

如果您發送編碼的MIME類型頭:

Content-Type: text/html; charset=utf-8 

然後瀏覽器會解釋源爲UTF-8,你可以把所有這些字符正常UTF-8編碼的字節。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

這具有信息存儲與HTML網頁,如果用戶保險箱,並重新打開優點:

或者,你可以在你的HTML頁面的這樣的標頭指定的編碼它在以後的硬盤裏。

就我個人而言,我會這樣做(發送正確的標題並將meta -tag添加到您的HTML頁面)。只要兩地就編碼達成一致就應該沒問題。

更新:HTML 5還增加a new syntax for specifying the encoding

<meta charset="utf-8"> 
相關問題