說明
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);
打印:
測試內容