針對大於號>、小於號<等html代碼 和 雙引號"、單引號'等java字符串的轉義處理

      Html特殊字符轉義

        我們都知道,在html中遇到>、<、空格等字符顯示處理是會將其轉爲&gt;、&lt;、&nbsp;來展示使用,以便兼容和不影響既有頁面的html代碼裏的成對標籤的正常加載,與之相同的還有:

字符 轉義字符
" &quot;
& &amp;
< &lt;
> &gt;
不斷開空格(non-breaking space) &nbsp;

        等等... ...

        那麼我們就會遇到如下業務場景,比如我們通過後臺獲取到的頁面值爲轉義後&gt、&lt;等, 而實際我們需要是>和<,這是我們就需要通過一個Java的類做下轉義處理。

//import org.springframework.web.util.HtmlUtils;

String sourceStr = "&gt;&nbsp;&lt;";
System.out.println("原始 sourceStr = " + sourceStr);

//將轉義後的html解析成原本的值
String targetStr = HtmlUtils.htmlUnescape(sourceStr);
System.out.println("目標 targetStr = " + targetStr );

        輸出結果:


 原始 sourceStr = &gt;&nbsp;&lt;
 目標 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 = &gt;&nbsp;&lt;
 目標 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也不能正常保存標題中包含的<和>等特殊字符,轉義後&gt;和&lt;有原樣顯示了,看,這就是應用場景!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章