Html特殊字符轉義
我們都知道,在html中遇到>、<、空格等字符顯示處理是會將其轉爲>、<、 來展示使用,以便兼容和不影響既有頁面的html代碼裏的成對標籤的正常加載,與之相同的還有:
字符 | 轉義字符 |
---|---|
" | " |
& | & |
< | < |
> | > |
不斷開空格(non-breaking space) | |
等等... ...
那麼我們就會遇到如下業務場景,比如我們通過後臺獲取到的頁面值爲轉義後>、<等, 而實際我們需要是>和<,這是我們就需要通過一個Java的類做下轉義處理。
//import org.springframework.web.util.HtmlUtils;
String sourceStr = "> <";
System.out.println("原始 sourceStr = " + sourceStr);
//將轉義後的html解析成原本的值
String targetStr = HtmlUtils.htmlUnescape(sourceStr);
System.out.println("目標 targetStr = " + targetStr );
輸出結果:
原始 sourceStr = > <
目標 targetStr = > <
反過來我們也可以將這些特殊字符轉以後返回給相應業務接口。
//import org.springframework.web.util.HtmlUtils;
String sourceStr = "> <";
System.out.println("原始 sourceStr = " + sourceStr);
//將特殊字符進行轉義處理
String targetStr = HtmlUtils.htmlEscape(sourceStr);
System.out.println("目標 targetStr = " + targetStr );
輸出結果:
原始 sourceStr = > <
目標 targetStr = > <
Java特殊字符轉義
同理,針對java的一些特殊字符串的轉義處理與上面項目,區別在與所用的到類和方式爲:StringEscapeUtils。
轉義字符 |
意義 |
\b |
退格(BS) ,將當前位置移到前一列 |
\f |
換頁(FF),將當前位置移到下頁開頭 |
\n |
換行(LF) ,將當前位置移到下一行開頭 |
\r |
回車(CR) ,將當前位置移到本行開頭 |
\t |
水平製表(HT) (跳到下一個TAB位置) |
\v |
垂直製表(VT) |
\\ |
代表一個反斜線字符''\' |
\' |
代表一個單引號(撇號)字符 |
\" |
代表一個雙引號字符 |
\? | 代表一個問號 |
\0 |
空字符(NULL) |
\ddd |
1到3位八進制數所代表的任意字符 |
\xhh |
1到2位十六進制所代表的任意字符 |
等等... ...
針對以上Java特殊字符的轉義,我們通過下面的方法進行處理。
//import org.apache.commons.lang.StringEscapeUtils;
String sourceStr = "{\\\"name\\\":\\\"spy\\\",\\\"id\\\":\\\'123456\\\'}";
System.out.println("原始 sourceStr = " + sourceStr);
String targetStr = StringEscapeUtils.unescapeJava(sourceStr);
System.out.println("目標 targetStr = " + targetStr);
輸出結果:
原始 targetStr = {\"name\":\"spy\",\"id\":'123456'}
目標 sourceStr = {"name":"spy","id":'123456'}
反過來我們也可以將這些特殊字符轉以後返回給相應業務接口。
//import org.apache.commons.lang.StringEscapeUtils;
String sourceStr = "{\"name\":\"spy\",\"id\":\'123456\'}";
System.out.println("原始 sourceStr = " + sourceStr);
String targetStr = StringEscapeUtils.escapeJava(sourceStr);
System.out.println("目標 targetStr = " + targetStr);
輸出結果:
原始 sourceStr = {"name":"spy","id":'123456'}
目標 targetStr = {\"name\":\"spy\",\"id\":'123456'}
PS:當然我們也可以通過String.replace、replaceAll等進行手動處理。
寫完這個筆記保存時發現,CSDN也不能正常保存標題中包含的<和>等特殊字符,轉義後>和<有原樣顯示了,看,這就是應用場景!