summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkukin-konstantin <kukin.konstantin@gmail.com>2017-01-11 20:33:18 +0300
committerkukin-konstantin <kukin.konstantin@gmail.com>2017-01-11 20:33:18 +0300
commit54a50a7c8a7e9d15c03bdb64babe54e5c123e5c7 (patch)
treed375e690871e51c221f88420808677af7f11a361
parentf3aba5cb3cca0f99f2a39d61acd960a836295593 (diff)
fix encodeUrl function
-rw-r--r--src/tools/StringTools.cpp20
-rw-r--r--test/tgbot/tools/StringTools.cpp2
2 files changed, 12 insertions, 10 deletions
diff --git a/src/tools/StringTools.cpp b/src/tools/StringTools.cpp
index c682b35..d5270db 100644
--- a/src/tools/StringTools.cpp
+++ b/src/tools/StringTools.cpp
@@ -84,20 +84,22 @@ string generateRandomString(size_t length) {
return result;
}
+
string urlEncode(const string& value, const std::string& additionalLegitChars) {
- static const string legitPunctuation = "-_.~";
- ostringstream result;
- result.fill('0');
- result << hex;
- for (const char& c : value) {
- if (isalnum(c) || legitPunctuation.find(c) != legitPunctuation.npos || additionalLegitChars.find(c) != additionalLegitChars.npos) {
- result << c;
+ static const string legitPunctuation = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_.-~:";
+ std::stringstream ss;
+ std::string t;
+ for (auto const &c : value) {
+ if ((legitPunctuation.find(c) == std::string::npos)
+ && (additionalLegitChars.find(c)==std::string::npos)) {
+ ss << '%' << std::uppercase << std::setfill('0') << std::setw(2) << std::hex << (unsigned int)(unsigned char)c;
+ t = ss.str();
} else {
- result << '%' << setw(2) << int((unsigned char) c);
+ ss << c;
}
}
- return result.str();
+ return ss.str();
}
string urlDecode(const string& value) {
diff --git a/test/tgbot/tools/StringTools.cpp b/test/tgbot/tools/StringTools.cpp
index 86eb147..453919c 100644
--- a/test/tgbot/tools/StringTools.cpp
+++ b/test/tgbot/tools/StringTools.cpp
@@ -50,7 +50,7 @@ BOOST_AUTO_TEST_CASE(split) {
BOOST_AUTO_TEST_CASE(urlEncode) {
string t = StringTools::urlEncode("`1234567890-qwertyuiop[]\\asdfghjkl;'zxcvbnm,./~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:ZXCVBNM<>? ");
- string e = "%601234567890-qwertyuiop%5b%5d%5casdfghjkl%3b%27zxcvbnm%2c.%2f~%21%40%23%24%25%5e%26%2a%28%29_%2bQWERTYUIOP%7b%7d%7cASDFGHJKL%3aZXCVBNM%3c%3e%3f%20";
+ string e = "%601234567890-qwertyuiop%5B%5D%5Casdfghjkl%3B%27zxcvbnm%2C.%2F~%21%40%23%24%25%5E%26%2A%28%29_%2BQWERTYUIOP%7B%7D%7CASDFGHJKL:ZXCVBNM%3C%3E%3F%20";
BOOST_CHECK_MESSAGE(t == e, diffS(t, e));
}