mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-12-04 05:20:30 +00:00
AK+LibWeb: Encode ' ' as '+' in application/x-www-form-urlencoded
This matches what the URL and HTML specifications ask us to do.
This commit is contained in:
parent
74241527d7
commit
3724ce765e
Notes:
sideshowbarker
2024-07-17 14:12:20 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/3724ce765e
3 changed files with 12 additions and 5 deletions
|
@ -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();
|
||||
}
|
||||
|
|
6
AK/URL.h
6
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); }
|
||||
|
|
|
@ -16,9 +16,9 @@ String url_encode(Vector<QueryParam> 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('&');
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue