说明
Numeric Character Reference
NCR是一种常见的标记结构,用于SGML和其他SGML相似的标记语言,如HTML和XML。它由一个短的字符序列组成,代表一个字符(全球的文字字符)。
NCR编码是由一个与号(&)跟着一个井号(#), 然后跟着这个字符的Unicode编码值, 最后跟着一个分号组成的.
&#ddddd; 十进制表示
&#xhhhh; 十六进制表示
还有一种叫 Character entity reference 其表示
&#name;
比如html中常见的表示空格的转义:
&#nbsp;
示例
如
测试内容
用NCR 则表示为
测试内容
它在html中会自动转成中文
如:
html源码中有如下内容:
<p>测试内容</p>
则会显示成:
测试内容
java中处理
转义
public static String escape(String src){
StringBuilder sb = new StringBuilder();
for(int i = 0; i < src.length(); i++){
sb.append("&#");
sb.append(Integer.toString(src.codePointAt(i)));
sb.append(";");
}
return sb.toString();
}
转成中文
public static String unescape(String src){
Pattern pattern = Pattern.compile("&#.*?;");
Matcher matcher = pattern.matcher(src);
StringBuilder sb = new StringBuilder();
while (matcher.find()){
String group = matcher.group();
int codePoint = Integer.parseInt(group.replaceAll("(&#|;)", ""));
sb.append((char) codePoint);
}
return sb.toString();
}
其他
apache-commons-lang jar包中也有工具可用
如:commons-lang3-3.7.jar
String s = org.apache.commons.lang3.StringEscapeUtils.unescapeHtml4("测试内容");
System.out.println(s);
打印:
测试内容