有的前段传过来的括号会被转义为& #40;和& #41; 但是html转义中有没有这个字符,其实就是多了个空格,改成(和)就可以了。
解:
1、先用正则把&和#之间的空格替换掉,注意,这里不是所有空格都替换掉,只替换& #40;和& #41;中的空格;所以需要用到正则,而不是字符串的replaceAll;比如(client aaa),中间的空格是不能替换掉的。
2、用java自带的htmlUtils工具进行html转码
具体如下:
import org.springframework.web.util.HtmlUtils;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 描述:TODO
*
* @author tanker@马磊磊
* @version 1.0
* @date 2021/3/10 9:13 下午
*/
public class HtmlDecodeUtils {
/**
* html或前段转义字符替换,常规页面符号以及括号:& #40; & #41等
* @param htmlStr
* @return
*/
public static String unescapeHtml(String htmlStr){
//可用表达式:&.{4}?; &.+?; &.*?;
Pattern pattern = Pattern.compile("&.*?;");
Matcher matcher = pattern.matcher(htmlStr);
System.out.println(htmlStr);
while(matcher.find()){
htmlStr = htmlStr.replaceFirst(matcher.group(),matcher.group().replaceAll(" ",""));
}
System.out.println(htmlStr);
return HtmlUtils.htmlUnescape(htmlStr);
}
}
正则解释一下:
&.*?;
表示匹配以&开头以;结尾的中间任意个字符的字符串;
while(matcher.find()){
htmlStr = htmlStr.replaceFirst(matcher.group(),matcher.group().replaceAll(" ",""));
}
这一步是找到符合上述正则的字符串分组替换条空格