StringEscapeUtils介绍

Posted king哥Java架构

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了StringEscapeUtils介绍相关的知识,希望对你有一定的参考价值。

前言

不出所料,今天也是水文章的一天,有一些有趣的工具类还是值得探索一下的。
这是很久之前的写的,翻出来发,虽然有些过时,但还是希望大家有时间可以去多探索一些工具类,里面是有一些很巧妙的设计的。

在java.commons.lang3的包中有许多方便好用的工具类,类似于处理字符串的StringUtils,处理日期的DateUtils等等,StringEscapeUtils也是其中的一员。

StringEscapeUtils是在java.commons.lang3的2.0版本中加入的工具类,在3.6版本中被标注为@Deprecated,表明在之后的版本中则为过时状态,之后StringEscapeUtils类被移到java.commons.text包下。

1. 功能用途

StringEscapeUtils的主要功能就是为Java,Java Script,html,XML进行转义与反转义。

  • escapeJava(String input) / unescapeJava(String unionCodeString) 将输入字符串转为unicode编码 / 将unicode字符串转为Utf-8格式的字符串
  • escapeHtml4(String input) / unescapeHtml4(String input) 转义/反转义html脚本
  • escapeEcmaScript(String input) / unescapeEcmaScript(String input) 转义/反转义js脚本
  • escapeXml(String input) / unescapeXml(String input) 转义/反转义xml脚本

除了列出的几个较常用的方法,还有escapeJson(String input) / unescapeJson(String input)、escapeCsv(String input) / unescapeCsv(String input)等等,可以看一下下面的执行例子,有个直观的认识。

如果你觉得自己学习效率低,缺乏正确的指导,可以加入资源丰富,学习氛围浓厚的技术圈一起学习交流吧!
[Java架构群]
群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的JAVA交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。

2. 执行例子

在项目中引入java.commons.text包(版本号可以访问官网选择):

gradle:

// https://mvnrepository.com/artifact/org.apache.commons/commons-text
compile group: 'org.apache.commons', name: 'commons-text', version: '1.3' 

maven:

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-text -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-text</artifactId>
    <version>1.3</version>
</dependency> 
import org.apache.commons.text.StringEscapeUtils;
import org.junit.Test;

/**
 * @author liuqian
 * @date 2018/4/3 16:27
 */
public class EscapeTest {

  @Test
  public void escapeTest() {
    System.out.println("转义/反转义Java字符串");
    String javaString = "这是Java字符串";
    System.out.println(StringEscapeUtils.escapeJava(javaString));
    System.out.println(StringEscapeUtils.unescapeJava(StringEscapeUtils.escapeJava(javaString)));
    System.out.println("-------------------------------------------------------------");
    System.out.println("转义/反转义Json字符串");
    String jsonString = "{\\"keyword\\": \\"这是Json字符串\\"}";
    System.out.println(StringEscapeUtils.escapeJson(jsonString));
    System.out.println(StringEscapeUtils.unescapeJson(StringEscapeUtils.escapeJson(jsonString)));
    System.out.println("-------------------------------------------------------------");
    //除了html4还有html3等格式
    System.out.println("转义/反转义Html字符串");
    String htmlString = "<strong>加粗字符</strong>";
    System.out.println(StringEscapeUtils.escapeHtml4(htmlString));
    System.out.println(StringEscapeUtils.unescapeHtml4(StringEscapeUtils.escapeHtml4(htmlString)));
    System.out.println("-------------------------------------------------------------");
    //除了xml10还有xml11等格式
    System.out.println("转义/反转义xml字符串");
    String xmlString = "<xml>\\"xml字符串\\"</xml>";
    System.out.println(StringEscapeUtils.escapeXml10(xmlString));
    System.out.println(StringEscapeUtils.unescapeXml(StringEscapeUtils.escapeXml10(xmlString)));
    System.out.println("-------------------------------------------------------------");
    System.out.println("转义/反转义csv字符串");
    String csvString = "1997,Ford,E350,\\"Super, luxurious truck\\"";
    System.out.println(StringEscapeUtils.escapeCsv(csvString));
    System.out.println(StringEscapeUtils.unescapeCsv(StringEscapeUtils.escapeCsv(csvString)));
    System.out.println("-------------------------------------------------------------");
    System.out.println("转义/反转义Java Script字符串");
    String jsString = "<script>alert('1111')</script>";
    System.out.println(StringEscapeUtils.escapeEcmaScript(jsString));
   System.out.println(StringEscapeUtils.unescapeEcmaScript(StringEscapeUtils.escapeEcmaScript(jsString)));
  }
} 

结果如下:

转义/反转义Java字符串
\\u8FD9\\u662FJava\\u5B57\\u7B26\\u4E32
这是Java字符串
-------------------------------------------------------------
转义/反转义Json字符串
{\\"keyword\\": \\"\\u8FD9\\u662FJson\\u5B57\\u7B26\\u4E32\\"}
{\\"keyword\\": \\"这是Json字符串\\"}
-------------------------------------------------------------
转义/反转义Html字符串
&lt;strong&gt;加粗字符&lt;/strong&gt;
<strong>加粗字符</strong>
-------------------------------------------------------------
转义/反转义xml字符串
&lt;xml&gt;&quot;xml字符串&quot;&lt;/xml&gt;
<xml>"xml字符串"</xml>
-------------------------------------------------------------
转义/反转义csv字符串
"1997,Ford,E350,""Super, luxurious truck"""
1997,Ford,E350,"Super, luxurious truck"
-------------------------------------------------------------
转义/反转义Java Script字符串
<script>alert(\\'1111\\')<\\/script>
<script>alert('1111')</script> 

最后

给大家分享一篇一线开发大牛整理的java高并发核心编程神仙文档,里面主要包含的知识点有:多线程、线程池、内置锁、JMM、CAS、JUC、高并发设计模式、Java异步回调、CompletableFuture类等。

文档地址:一篇神文就把java多线程,锁,JMM,JUC和高并发设计模式讲明白了

码字不易,如果觉得本篇文章对你有用的话,请给我一键三连!关注作者,后续会有更多的干货分享,请持续关注!

以上是关于StringEscapeUtils介绍的主要内容,如果未能解决你的问题,请参考以下文章

StringEscapeUtils的使用

StringEscapeUtils类的转义与反转义方法

StringEscapeUtils的常用使用,防止SQL注入及XSS注入

StringEscapeUtils类

WEB安全隐患

如何告诉 Java 使用哪个 StringEscapeUtils.escapeXML()?