diff --git a/CHANGELOG.md b/CHANGELOG.md index 77f065dbf..e26626e94 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ * 【core】 ArrayUtil.isEmpty可变长参数改为数组(issue#555@Github) * 【core】 新增Convert.toMap方法(issue#I12ISI@Gitee) * 【aop 】 增加返回值获取支持,优化逻辑和接口(pr#561@Github) +* 【aop 】 改进HtmlUtil.removeHtmlAttr(issue#556@Github) ### Bug修复 * 【extra】 修复Mail中sslEnable无效问题(pr#74@Gitee) diff --git a/hutool-captcha/src/main/java/cn/hutool/captcha/AbstractCaptcha.java b/hutool-captcha/src/main/java/cn/hutool/captcha/AbstractCaptcha.java index 482c1a531..010e4d23a 100644 --- a/hutool-captcha/src/main/java/cn/hutool/captcha/AbstractCaptcha.java +++ b/hutool-captcha/src/main/java/cn/hutool/captcha/AbstractCaptcha.java @@ -30,11 +30,11 @@ public abstract class AbstractCaptcha implements ICaptcha { private static final long serialVersionUID = 3180820918087507254L; /** 图片的宽度 */ - protected int width = 100; + protected int width; /** 图片的高度 */ - protected int height = 37; + protected int height; /** 验证码干扰元素个数 */ - protected int interfereCount = 15; + protected int interfereCount; /** 字体 */ protected Font font; /** 验证码 */ diff --git a/hutool-http/src/main/java/cn/hutool/http/HtmlUtil.java b/hutool-http/src/main/java/cn/hutool/http/HtmlUtil.java index 5224390ff..bcae7eb4b 100644 --- a/hutool-http/src/main/java/cn/hutool/http/HtmlUtil.java +++ b/hutool-http/src/main/java/cn/hutool/http/HtmlUtil.java @@ -55,7 +55,7 @@ public class HtmlUtil { * @return 转义后的文本 */ public static String escape(String text) { - return encode(text, TEXT); + return encode(text); } /** @@ -118,7 +118,7 @@ public class HtmlUtil { * @return 去除标签后的文本 */ public static String removeHtmlTag(String content, boolean withTagContent, String... tagNames) { - String regex = null; + String regex; for (String tagName : tagNames) { if (StrUtil.isBlank(tagName)) { continue; @@ -146,10 +146,14 @@ public class HtmlUtil { * @return 处理后的文本 */ public static String removeHtmlAttr(String content, String... attrs) { - String regex = null; + String regex; for (String attr : attrs) { - // (?i)表示忽略大小写 - regex = StrUtil.format("(?i)\\s*{}=([\"']).*?\\1", attr); + // (?i) 表示忽略大小写 + // \s* 属性名前后的空白符去除 + // [^>]+? 属性值,至少有一个非>的字符,>表示标签结束 + // \s+(?=>) 表示属性值后跟空格加>,既末尾的属性,此时去掉空格 + // (?=\s|>) 表示属性值后跟空格(属性后还有别的属性)或者跟>(最后一个属性) + regex = StrUtil.format("(?i)(\\s*{}\\s*=[^>]+?\\s+(?=>))|(\\s*{}\\s*=[^>]+?(?=\\s|>))", attr, attr); content = content.replaceAll(regex, StrUtil.EMPTY); } return content; @@ -163,7 +167,7 @@ public class HtmlUtil { * @return 处理后的文本 */ public static String removeAllHtmlAttr(String content, String... tagNames) { - String regex = null; + String regex; for (String tagName : tagNames) { regex = StrUtil.format("(?i)<{}[^>]*?>", tagName); content = content.replaceAll(regex, StrUtil.format("<{}>", tagName)); @@ -175,10 +179,9 @@ public class HtmlUtil { * Encoder * * @param text 被编码的文本 - * @param array 特殊字符集合 * @return 编码后的字符 */ - private static String encode(String text, char[][] array) { + private static String encode(String text) { int len; if ((text == null) || ((len = text.length()) == 0)) { return StrUtil.EMPTY; @@ -188,7 +191,7 @@ public class HtmlUtil { for (int i = 0; i < len; i++) { c = text.charAt(i); if (c < 64) { - buffer.append(array[c]); + buffer.append(TEXT[c]); } else { buffer.append(c); } diff --git a/hutool-http/src/test/java/cn/hutool/http/test/HtmlUtilTest.java b/hutool-http/src/test/java/cn/hutool/http/test/HtmlUtilTest.java index bc9ec6bc4..9e390f267 100644 --- a/hutool-http/src/test/java/cn/hutool/http/test/HtmlUtilTest.java +++ b/hutool-http/src/test/java/cn/hutool/http/test/HtmlUtilTest.java @@ -130,9 +130,26 @@ public class HtmlUtilTest { @Test public void removeHtmlAttrTest() { + + // 去除的属性加双引号测试 String html = "
"; String result = HtmlUtil.removeHtmlAttr(html, "class"); Assert.assertEquals("", result); + + // 去除的属性后跟空格、加单引号、不加引号测试 + html = ""; + result = HtmlUtil.removeHtmlAttr(html, "class"); + Assert.assertEquals("", result); + + // 去除的属性位于标签末尾、其它属性前测试 + html = ""; + result = HtmlUtil.removeHtmlAttr(html, "class"); + Assert.assertEquals("", result); + + // 去除的属性名和值之间存在空格 + html = ""; + result = HtmlUtil.removeHtmlAttr(html, "class"); + Assert.assertEquals("", result); } @Test