当使用HTML实体转义字符串时,如果我使用UTF-8,我是否可以安全地跳过Unicode 127之上的编码字符?

Amo*_*mos 7 html java encoding escaping html-entities

在HTML中输出字符串时,必须将特殊字符转义为HTML实体("&<>"等),这是可以理解的.

我已经检查了两个这样的Java实现:org.apache.commons.lang.StringEscapeUtils.escapeHtml(String)net.htmlparser.jericho.CharacterReference.encode(CharSequence)

两者都转义Unicode代码点127(0x7F)以上的所有字符,这实际上是所有非英文字符.

这种行为很好,但是当字符是非英语时(例如,希伯来语或阿拉伯语),它产生的字符串是非人类可读的.我已经看到,当Unicode 127之上的字符没有像这样转义时,它们仍然在浏览器中正确呈现 - 我相信这是因为html页面是UTF-8编码的,因此浏览器可以理解这些字符.

我的问题:如果我的网页是UTF-8编码的话,我可以在转义HTML实体时安全地禁用转义代码点127上方的Unicode字符吗?

Álv*_*lez 6

您只需要在两种情况下使用HTML实体:

  • 转义HTML中具有特殊含义的字符(例如<)
  • 显示不属于文档编码的字符(例如,ISO-8859-1文档中的符号)

鉴于UTF-8可以表示所有Unicode字符,因此仅适用第一种情况.

手动键入HTML时,您可能会发现插入HTML实体的实用性,如果您的编辑器和/或键盘不允许您键入某些字符(更容易键入&copy;而不是尝试找出如何键入实际的© )但是当自动转义文本时,你只需要增加页面大小;-)

我对Java知之甚少,但其他语言有不同的功能来编码特殊字符和所有可能的实体.