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

标签 java html encoding escaping html-entities

当以 HTML 格式输出字符串时,出于可以理解的原因,必须将特殊字符转义为 HTML 实体(“&<>”等)。

我检查了这两个 Java 实现: org.apache.commons.lang.StringEscapeUtils.escapeHtml(字符串) net.htmlparser.jericho.CharacterReference.encode(字符序列)

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

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

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

最佳答案

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

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

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

当手动输入 HTML 时,如果您的编辑器和/或键盘不允许您输入特定字符,您可能会发现不时插入 HTML 实体很实用(只输入 &copy; 比试图找出更容易如何键入实际的 ©) 但当自动转义文本时,您只会使页面变大 ;-)

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

关于java - 使用 HTML 实体转义字符串时,如果我使用 UTF-8,是否可以安全地跳过 Unicode 127 以上的编码字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4943070/

相关文章:

java - JSON字段不能是字符串吗?

java - 在 J2ME M3G 中查找对象

html - 溢出 : hidden

html - CSS无限波纹动画

mysql - 对 MySQL 使用 UTF-8

Java虚方法调用

java - java while 循环条件

jquery - 触发链接到 document.body.scrollTop 上的 KnockoutObservable 的 Knockout BindingHandler

python - 如何为Python解释器全局设置文件名编码?

Java:从 URL 读取会产生乱码