Java如何将单引号和双引号编码为HTML实体?

如何编码"进入"'进入'

我很惊讶单引号和双引号没有在HTML实体4.0中定义,因此StringEscapeUtils无法将这2个字符转义为相应的实体。

还有其他与String相关的工具能够做到这一点吗?

HTML实体4.0中没有定义单引号和双引号的原因吗?

除了单引号和双引号外,是否有任何框架能够将所有unicode字符编码到各自的实体中? 由于所有unicode都可以手动转换为十进制实体并以HTML格式显示,所以奇怪有没有任何工具能够自动转换它?

  1. 单引号和双引号未在HTML 4.0中定义

单引号仅在HTML 4.0中未定义,双引号定义为" 启动HTML2.0

  1. StringEscapeUtils无法将这2个字符转义为相应的实体

StringEscapeUtils escapeXml11 支持将单引号转换'

例如:

 StringEscapeUtils.escapeXml11("'"); //Returns ' StringEscapeUtils.escapeHtml4("\""); //Returns " 
  1. 还有其他与String相关的工具能够做到这一点吗?

Spring框架中的HTMLUtils负责单引号和双引号,它还将值转换为十进制(例如' " )。 以下示例取自此问题的答案:

 import org.springframework.web.util.HtmlUtils; [...] HtmlUtils.htmlEscapeDecimal("&")` //gives & HtmlUtils.htmlEscape("&")` //gives & 
  1. HTML实体4.0中没有定义单引号和双引号的原因吗?

根据HTML 4中的Character实体引用,未定义单引号。 双引号可从HTML2.0获得。 而单引号作为XHTML1.0的一部分得到支持。

  1. 将所有unicode字符编码成相应实体的工具或方法

作为这个问题的答案的一部分,提到了一个非常好的和简单的java实现。

以下是基于该答案的示例程序:

 import org.apache.commons.lang3.StringEscapeUtils; public class HTMLCharacterEscaper { public static void main(String[] args) { //With StringEscapeUtils System.out.println("Using SEU: " + StringEscapeUtils.escapeHtml4("\" ¶")); System.out.println("Using SEU: " + StringEscapeUtils.escapeXml11("'")); //Single quote & double quote System.out.println(escapeHTML("It's good")); System.out.println(escapeHTML("\" Grit \"")); //Unicode characters System.out.println(escapeHTML("This is copyright symbol ©")); System.out.println(escapeHTML("Paragraph symbol ¶")); System.out.println(escapeHTML("This is pound £")); } public static String escapeHTML(String s) { StringBuilder out = new StringBuilder(Math.max(16, s.length())); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (c > 127 || c == '"' || c == '<' || c == '>' || c == '&' || c == '\'') { out.append("&#"); out.append((int) c); out.append(';'); } else { out.append(c); } } return out.toString(); } } 

以下是一些有趣的链接,我在追求答案时遇到了这些链接:

  • 用于排版的常用HTML实体
  • 为什么不应该 被用来逃避单引号?
  • 命名字符参考'
  • HTML撇号