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

时间:2015-06-03 12:46:32

标签: java html

如何将$sql = ("SELECT * FROM ".$SETTINGS["data_table"]." ORDER BY date DESC limit 30"); $sql_result = mysql_query ($sql, $connection ) or die ('request "Could not execute SQL query" '.$sql); while ($row = mysql_fetch_assoc($sql_result)) { } 编入""编入'

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

是否还有其他与字符串相关的工具可以执行此操作?

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

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

1 个答案:

答案 0 :(得分:8)

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

单引号仅在HTML 4.0中未定义,双引号定义为"从HTML2.0开始

  
      
  1. StringEscapeUtils无法将这2个字符转义为相应的实体
  2.   
{p} escapeXml11StringEscapeUtils supports将单引号转换为'

例如:

StringEscapeUtils.escapeXml11("'"); //Returns '
StringEscapeUtils.escapeHtml4("\""); //Returns "
  
      
  1. 是否有其他与字符串相关的工具可以执行此操作?
  2.   
来自Spring框架的

HTMLUtils负责单引号&双引号,它还将值转换为十进制(如'& ")。 以下示例取自此question的答案:

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

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

  
      
  1. 将所有unicode字符编码为各个实体的工具或方法
  2.   

有一个很好的&作为对此question的答案的一部分提到的简单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();
    }

}

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