您的位置:首页 > 其它

url编解码小记 (url_encode, url_decode)

2011-12-09 14:03 579 查看
原理:为了方便url传输过程中的可识别程度,主要分为两块进行,一块是可识别标准字符,一块是特殊字符及其它多字节, 对于可识别的不变动, 对于不可识别的只进行了转16进制操作再利用相应的规则进行拼接显示。

方法:

//URL编解码
inline unsigned char to_hex(const unsigned char &x)
{
return x > 9 ? x + 55: x + 48;
}

inline unsigned char from_hex(const unsigned char &x)
{
return isdigit(x) ? x-'0' : x-'A'+10;
}

inline std::string url_encode(const std::string &in )
{
std::string out;
for( size_t ix = 0; ix < in.size(); ix++ )
{
unsigned char buf[4];
memset( buf, 0, 4 );
if( isalnum( (unsigned char)in[ix] ) ){
buf[0] = in[ix];
} else {
buf[0] = '%';
buf[1] = to_hex( (unsigned char)in[ix] >> 4 );
buf[2] = to_hex( (unsigned char)in[ix] % 16);
}
out += (char *)buf;
}
return out;
}

inline std::string url_decode(const std::string &in)
{
std::string out;
for( size_t ix = 0; ix < in.size(); ix++ )
{
unsigned char ch = 0;
if(in[ix]=='%')
{
ch = (from_hex(in[ix+1])<<4);
ch |= from_hex(in[ix+2]);
ix += 2;
} else {
ch = in[ix];
}
out += (char)ch;
}
return out;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: