将网页编码文字还原:
例如:https%3A%2F%2Fwww.example.com%2F%3Fparam%3Dvalue%26key%3D%E4%B8%AD%E6%96%87
解码:
https: // www.example.com/?param=value&key=中文
代码:
char hexValue(char ch)
{
if (isdigit(ch))
{
return ch - '0';
}
return ::toupper(ch) - 'A' + 10;
}
std::string urlDecode(std::string& input)
{
std::string decoded;
size_t inputLen = input.size();
for (size_t i = 0; i < inputLen; i++)
{
char c = input[i];
if (c == '+')
{
decoded.push_back(' ');
}
else if (c == '%' && i + 2 < inputLen)
{
char hex1 = input[++i];
char hex2 = input[++i];
if (isxdigit(hex1) && isxdigit(hex2))
{
char decodedChar = (hexValue(hex1) << 4) | hexValue(hex2);
decoded.push_back(decodedChar);
}
else
{
decoded.push_back(c);
decoded.push_back(hex1);
decoded.push_back(hex2);
}
}
else
{
decoded.push_back(c);
}
}
return decoded;
}