Fix URL encoding for '&'

fixes #12199
This commit is contained in:
Gunnar Beutner 2016-07-25 10:54:17 +02:00
parent cdda3bad8c
commit 22bb1f406a
2 changed files with 8 additions and 5 deletions

View File

@ -26,8 +26,8 @@
#define UNRESERVED ALPHA NUMERIC "-._~" "%"
#define GEN_DELIMS ":/?#[]@"
#define SUB_DELIMS "!$&'()*+,;="
#define RESERVED GEN_DELIMS SUB-DELIMS
#define PCHAR UNRESERVED SUB_DELIMS ":@"
#define PCHAR_ENCODE UNRESERVED ":@"
#define ACSCHEME ALPHA NUMERIC ".-+"
@ -37,7 +37,10 @@
#define ACPORT NUMERIC
#define ACPATHSEGMENT PCHAR
#define ACPATHSEGMENT_ENCODE PCHAR_ENCODE
#define ACQUERY PCHAR "/?"
#define ACQUERY_ENCODE PCHAR_ENCODE "/?"
#define ACFRAGMENT PCHAR "/?"
#define ACFRAGMENT_ENCODE PCHAR_ENCODE "/?"
#endif /* URL_CHARACTERS_H */

View File

@ -243,7 +243,7 @@ String Url::Format(bool print_credentials) const
else {
BOOST_FOREACH (const String& segment, m_Path) {
url += "/";
url += Utility::EscapeString(segment, ACPATHSEGMENT, false);
url += Utility::EscapeString(segment, ACPATHSEGMENT_ENCODE, false);
}
}
@ -252,7 +252,7 @@ String Url::Format(bool print_credentials) const
typedef std::pair<String, std::vector<String> > kv_pair;
BOOST_FOREACH (const kv_pair& kv, m_Query) {
String key = Utility::EscapeString(kv.first, ACQUERY, false);
String key = Utility::EscapeString(kv.first, ACQUERY_ENCODE, false);
if (param.IsEmpty())
param = "?";
else
@ -268,7 +268,7 @@ String Url::Format(bool print_credentials) const
if (kv.second.size() > 1)
temp += "[]";
temp += "=" + Utility::EscapeString(s, ACQUERY, false);
temp += "=" + Utility::EscapeString(s, ACQUERY_ENCODE, false);
}
param += temp;
}
@ -277,7 +277,7 @@ String Url::Format(bool print_credentials) const
url += param;
if (!m_Fragment.IsEmpty())
url += "#" + Utility::EscapeString(m_Fragment, ACFRAGMENT, false);
url += "#" + Utility::EscapeString(m_Fragment, ACFRAGMENT_ENCODE, false);
return url;
}