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

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值