From 39df3623e1bd64a3be68caa8ed9081eefdb91a67 Mon Sep 17 00:00:00 2001 From: Looly Date: Thu, 21 Oct 2021 21:36:22 +0800 Subject: [PATCH] fix bug --- CHANGELOG.md | 1 + .../main/java/cn/hutool/core/net/url/UrlBuilder.java | 2 +- .../src/main/java/cn/hutool/core/net/url/UrlQuery.java | 2 +- .../test/java/cn/hutool/core/net/UrlBuilderTest.java | 10 ++++++++++ 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ad9219221..edb403142 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ * 【crypto 】 修复KeyUtil异常信息参数丢失问题(issue#1902@Github) * 【core 】 修复StrUtil.split和splittoArray不一致问题(issue#I4ELU5@Github) * 【core 】 修复SymmetricCrypto未关闭CipherOutputStream导致的问题(issue#I4EMST@Gitee) +* 【core 】 修复QueryBuilder对/转义问题(issue#1904@Github) ------------------------------------------------------------------------------------------------------------- diff --git a/hutool-core/src/main/java/cn/hutool/core/net/url/UrlBuilder.java b/hutool-core/src/main/java/cn/hutool/core/net/url/UrlBuilder.java index 357a215b8..be6d5c94b 100644 --- a/hutool-core/src/main/java/cn/hutool/core/net/url/UrlBuilder.java +++ b/hutool-core/src/main/java/cn/hutool/core/net/url/UrlBuilder.java @@ -129,7 +129,7 @@ public final class UrlBuilder implements Serializable { */ public static UrlBuilder of(String url, Charset charset) { Assert.notBlank(url, "Url must be not blank!"); - return of(URLUtil.url(url.trim()), charset); + return of(URLUtil.url(StrUtil.trim(url)), charset); } /** diff --git a/hutool-core/src/main/java/cn/hutool/core/net/url/UrlQuery.java b/hutool-core/src/main/java/cn/hutool/core/net/url/UrlQuery.java index 3c297b9de..8f882d9f5 100644 --- a/hutool-core/src/main/java/cn/hutool/core/net/url/UrlQuery.java +++ b/hutool-core/src/main/java/cn/hutool/core/net/url/UrlQuery.java @@ -312,7 +312,7 @@ public class UrlQuery { private static String toStr(CharSequence str, Charset charset, boolean isEncode) { String result = StrUtil.str(str); if (isEncode) { - result = URLUtil.encodeAll(result, charset); + result = URLUtil.encodeFragment(result, charset); } return result; } diff --git a/hutool-core/src/test/java/cn/hutool/core/net/UrlBuilderTest.java b/hutool-core/src/test/java/cn/hutool/core/net/UrlBuilderTest.java index f53085fc6..b88687dff 100644 --- a/hutool-core/src/test/java/cn/hutool/core/net/UrlBuilderTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/net/UrlBuilderTest.java @@ -271,4 +271,14 @@ public class UrlBuilderTest { urlBuilder = UrlBuilder.ofHttp(urlBuilder.toString()); Assert.assertEquals(urlBuilder.toString(), urlBuilder.toString()); } + + @Test + public void slashEncodeTest(){ + // https://github.com/dromara/hutool/issues/1904 + // 在query中,"/"是不可转义字符 + // 见:https://www.rfc-editor.org/rfc/rfc3986.html#section-3.4 + String url = "https://invoice.maycur.com/2b27a802-8423-4d41-86f5-63a6b259f61e.xlsx?download/2b27a802-8423-4d41-86f5-63a6b259f61e.xlsx&e=1630491088"; + final UrlBuilder urlBuilder = UrlBuilder.ofHttp(url); + Assert.assertEquals(url, urlBuilder.toString()); + } }