Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(163)

Unified Diff: net/base/url_util.cc

Issue 632843003: Add a function to escape a query part of url (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rename the function to EscapeQueryParameters Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/base/url_util.cc
diff --git a/net/base/url_util.cc b/net/base/url_util.cc
index 8540e193d3c53b32bfd3937c81ec4bba744fecda..ca00b4b9b0d77a7e135cbe631dbc9803250c3040 100644
--- a/net/base/url_util.cc
+++ b/net/base/url_util.cc
@@ -134,4 +134,37 @@ bool GetValueForKeyInQuery(const GURL& url,
return false;
}
+GURL EscapeQueryParameters(const GURL& url) {
+ const std::string input = url.query();
+ url::Component cursor(0, input.size());
+ std::string output;
+ url::Component key_range, value_range;
+ while (url::ExtractQueryKeyValue(
+ input.data(), &cursor, &key_range, &value_range)) {
+ std::string key(input.data() + key_range.begin, key_range.len);
+ std::string value(input.data() + value_range.begin, value_range.len);
+ std::string unescaped_key = UnescapeURLComponent(
+ key,
+ net::UnescapeRule::SPACES | net::UnescapeRule::URL_SPECIAL_CHARS |
+ net::UnescapeRule::REPLACE_PLUS_WITH_SPACE);
+ std::string unescaped_value = UnescapeURLComponent(
+ value,
+ net::UnescapeRule::SPACES | net::UnescapeRule::URL_SPECIAL_CHARS |
+ net::UnescapeRule::REPLACE_PLUS_WITH_SPACE);
+ std::string param_name = EscapeQueryParamValue(unescaped_key, true);
+ std::string param_value = EscapeQueryParamValue(unescaped_value, true);
+ std::string key_value_pair = (param_name + "=" + param_value);
+ if (!output.empty())
+ output += "&";
+
+ output += key_value_pair;
+ }
+ if (output.empty())
+ return url;
+
+ GURL::Replacements replacements;
+ replacements.SetQueryStr(output);
+ return url.ReplaceComponents(replacements);
+}
+
} // namespace net
« net/base/url_util.h ('K') | « net/base/url_util.h ('k') | net/base/url_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698