接上一篇encodeURI
//
1、网上找了两个函数:
inline BYTE toHex(const BYTE &x);
string _encodeURL(std::string &sIn);
具体实现体如下:
inline BYTE toHex(const BYTE &x){
return x > 9 ? x + 55: x + 48;
}
string _encodeURL(std::string &sIn)
{
string sOut;
for( long ix = 0; ix < (long)sIn.size(); ix++ )
{
BYTE buf[4];
memset( buf, 0, 4 );
if( isalnum( (BYTE)sIn[ix] ) )
{
buf[0] = sIn[ix];
}
else if ( isspace( (BYTE)sIn[ix] ) )
{
buf[0] = '+';
}
else
{
buf[0] = '%';
buf[1] = toHex( (BYTE)sIn[ix] >> 4 );
buf[2] = toHex( (BYTE)sIn[ix] % 16);
}
sOut += (char *)buf;
}
return sOut;
}
2、封装了一下供UNICODE和多字节调用:
{
#ifdef UNICODE
CStringA sTemp = CStringA(strSource);
string s1 = sTemp.GetBuffer();
sTemp.ReleaseBuffer();
string str = _encodeURL(s1);
return CString(str.c_str());
#else
string s1 = strSource;
string str = _encodeURL(s1);
return str.c_str();
#endif
}
OK,搞定!!!