diff --git a/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java index e90a433c2..1ad962103 100755 --- a/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java @@ -68,7 +68,7 @@ import java.util.Map; public class XmlUtil { /** - * 字符串常量:XML 空格转义 {@code " " -> " "} + * 字符串常量:XML 不间断空格转义 {@code " " -> " "} */ public static final String NBSP = " "; diff --git a/hutool-http/src/main/java/cn/hutool/http/html/HtmlUtil.java b/hutool-http/src/main/java/cn/hutool/http/html/HtmlUtil.java index f9fe4c5a9..2c1e70de6 100755 --- a/hutool-http/src/main/java/cn/hutool/http/html/HtmlUtil.java +++ b/hutool-http/src/main/java/cn/hutool/http/html/HtmlUtil.java @@ -27,19 +27,22 @@ public class HtmlUtil { */ public static final Pattern RE_SCRIPT = Pattern.compile("<[\\s]*?script[^>]*?>.*?<[\\s]*?\\/[\\s]*?script[\\s]*?>", Pattern.CASE_INSENSITIVE); - private static final char[][] TEXT = new char[64][]; + private static final char[][] TEXT = new char[256][]; static { - for (int i = 0; i < 64; i++) { + // ascii码值最大的是【0x7f=127】,扩展ascii码值最大的是【0xFF=255】, + // 因为ASCII码使用指定的7位或8位二进制数组合来表示128或256种可能的字符,标准ASCII码也叫基础ASCII码。 + for (int i = 0; i < 256; i++) { TEXT[i] = new char[]{(char) i}; } // special HTML characters TEXT['\''] = "'".toCharArray(); // 单引号 (''' doesn't work - it is not by the w3 specs) - TEXT['"'] = XmlUtil.QUOTE.toCharArray(); // 单引号 + TEXT['"'] = XmlUtil.QUOTE.toCharArray(); // 双引号 TEXT['&'] = XmlUtil.AMP.toCharArray(); // &符 TEXT['<'] = XmlUtil.LT.toCharArray(); // 小于号 TEXT['>'] = XmlUtil.GT.toCharArray(); // 大于号 + TEXT[' '] = XmlUtil.NBSP.toCharArray(); // 不断开空格(non-breaking space,缩写nbsp。ASCII值是32:是用键盘输入的空格;ASCII值是160:不间断空格,即  ,所产生的空格,作用是在页面换行时不被打断) } /** @@ -201,7 +204,7 @@ public class HtmlUtil { char c; for (int i = 0; i < len; i++) { c = text.charAt(i); - if (c < 64) { + if (c < 256) { buffer.append(TEXT[c]); } else { buffer.append(c); diff --git a/hutool-http/src/test/java/cn/hutool/http/HtmlUtilTest.java b/hutool-http/src/test/java/cn/hutool/http/HtmlUtilTest.java index e13eb8af3..1f2c14bc8 100644 --- a/hutool-http/src/test/java/cn/hutool/http/HtmlUtilTest.java +++ b/hutool-http/src/test/java/cn/hutool/http/HtmlUtilTest.java @@ -135,6 +135,16 @@ public class HtmlUtilTest { Assert.assertEquals("'", HtmlUtil.unescape("'")); } + @Test + public void escapeTest2() { + final char c = ' '; // 不断开空格(non-breaking space,缩写nbsp。) + Assert.assertEquals(c, 160); + final String html = "
"; + final String escape = HtmlUtil.escape(html); + Assert.assertEquals("<html><body> </body></html>", escape); + Assert.assertEquals(" ", HtmlUtil.unescape(" ")); + } + @Test public void filterTest() { final String html = "