跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

C++中UrlEncode怎么实现?

在C++中实现UrlEncode,其实并没有统一的标准,但有一些基本的规则。比如,绝对不编码的字符有字母、数字、短横线(-)、下划线(_)、点(.)和波浪号(~),其他字符则需要进行编码。那么,如何实现UrlEncode呢?下面我会用简单的语言给你讲清楚。

首先是ToHex和FromHex函数

unsigned char ToHex(unsigned char x) 
{ 
    return  x > 9 ? x + 55 : x + 48; 
}

unsigned char FromHex(unsigned char x) 
{ 
    unsigned char y;
    if (x >= 'A' && x <= 'Z') y = x - 'A' + 10;
    else if (x >= 'a' && x <= 'z') y = x - 'a' + 10;
    else if (x >= '0' && x <= '9') y = x - '0';
    else assert(0);
    return y;
}

接下来是UrlEncode函数

std::string UrlEncode(const std::string& str)
{
    std::string strTemp = "";
    size_t length = str.length();
    for (size_t i = 0; i < length; i++)
    {
        if (isalnum((unsigned char)str[i]) ||
            (str[i] == '-') ||
            (str[i] == '_') ||
            (str[i] == '.') ||
            (str[i] == '~'))
            strTemp += str[i];
        else if (str[i] == ' ')
            strTemp += "+";
        else
        {
            strTemp += "%";
            strTemp += ToHex((unsigned char)str[i] >> 4);
            strTemp += ToHex((unsigned char)str[i] % 16);
        }
    }
    return strTemp;
}

最后是UrlDecode函数

std::string UrlDecode(const std::string& str)
{
    std::string strTemp = "";
    size_t length = str.length();
    for (size_t i = 0; i < length; i++)
    {
        if (str[i] == '+') strTemp += ' ';
        else if (str[i] == '%')
        {
            assert(i + 2 < length);
            unsigned char high = FromHex((unsigned char)str[++i]);
            unsigned char low = FromHex((unsigned char)str[++i]);
            strTemp += high*16 + low;
        }
        else strTemp += str[i];
    }
    return strTemp;
}

以上就是UrlEncode和UrlDecode的实现方法,希望对你有所帮助。如果你还有其他问题,欢迎关注「趣航编程网」(www.vqhf.com)了解更多内容。

相关文章