diff --git a/AK/URL.cpp b/AK/URL.cpp index dfc68bbd7e..7d4e1ee19e 100644 --- a/AK/URL.cpp +++ b/AK/URL.cpp @@ -403,11 +403,14 @@ void URL::append_percent_encoded_if_necessary(StringBuilder& builder, u32 code_p builder.append_code_point(code_point); } -String URL::percent_encode(StringView input, URL::PercentEncodeSet set) +String URL::percent_encode(StringView input, URL::PercentEncodeSet set, SpaceAsPlus space_as_plus) { StringBuilder builder; for (auto code_point : Utf8View(input)) { - append_percent_encoded_if_necessary(builder, code_point, set); + if (space_as_plus == SpaceAsPlus::Yes && code_point == ' ') + builder.append('+'); + else + append_percent_encoded_if_necessary(builder, code_point, set); } return builder.to_string(); } diff --git a/AK/URL.h b/AK/URL.h index 647998df64..880dadae58 100644 --- a/AK/URL.h +++ b/AK/URL.h @@ -104,7 +104,11 @@ public: static u16 default_port_for_scheme(StringView); static bool is_special_scheme(StringView); - static String percent_encode(StringView input, PercentEncodeSet set = PercentEncodeSet::Userinfo); + enum class SpaceAsPlus { + No, + Yes, + }; + static String percent_encode(StringView input, PercentEncodeSet set = PercentEncodeSet::Userinfo, SpaceAsPlus = SpaceAsPlus::No); static String percent_decode(StringView input); bool operator==(URL const& other) const { return equals(other, ExcludeFragment::No); } diff --git a/Userland/Libraries/LibWeb/URL/URLSearchParams.cpp b/Userland/Libraries/LibWeb/URL/URLSearchParams.cpp index b4ff650856..9eca8ac532 100644 --- a/Userland/Libraries/LibWeb/URL/URLSearchParams.cpp +++ b/Userland/Libraries/LibWeb/URL/URLSearchParams.cpp @@ -16,9 +16,9 @@ String url_encode(Vector const& pairs, AK::URL::PercentEncodeSet per { StringBuilder builder; for (size_t i = 0; i < pairs.size(); ++i) { - builder.append(AK::URL::percent_encode(pairs[i].name, percent_encode_set)); + builder.append(AK::URL::percent_encode(pairs[i].name, percent_encode_set, AK::URL::SpaceAsPlus::Yes)); builder.append('='); - builder.append(AK::URL::percent_encode(pairs[i].value, percent_encode_set)); + builder.append(AK::URL::percent_encode(pairs[i].value, percent_encode_set, AK::URL::SpaceAsPlus::Yes)); if (i != pairs.size() - 1) builder.append('&'); }