针对大于号>、小于号<等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;有原样显示了,看,这就是应用场景!

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