php函数UrlEncode的C++版

CString s2utfs(const wstring& strSrc)
{
string strRes;
wstring wstrUni = strSrc;
char* chUTF8 = new char[wstrUni.length() * 3];
memset(chUTF8,0x00,wstrUni.length() * 3);
CString strName = Uni2UTF(wstrUni,chUTF8, wstrUni.length() * 3);
strRes = chUTF8; 
delete []chUTF8;
return strName;
}

CString URLEncode( const wstring& strRes, char *utf8, int nMaxSize )
{
if (utf8 == NULL) {
return L"";
}
CString strName;
int len = 0;
int size_d = nMaxSize;


for (wstring::const_iterator it = strRes.begin(); it != strRes.end(); ++it)
{
wchar_t wchar = *it;
if (wchar < 0x80)
{
strName += wchar;

continue;
}
else if(wchar < 0x800)
{
if (len + 1 >= size_d)
return L"";

utf8[len++] = 0xc0 | ( wchar >> 6 );
utf8[len++] = 0x80 | ( wchar & 0x3f );
}
else if(wchar < 0x10000 )
{
if (len + 2 >= size_d)
return L"";

utf8[len++] = 0xe0 | ( wchar >> 12 );
utf8[len++] = 0x80 | ( (wchar >> 6) & 0x3f );
utf8[len++] = 0x80 | ( wchar & 0x3f );
}
else if( wchar < 0x200000 ) 
{
if (len + 3 >= size_d)
return L"";

utf8[len++] = 0xf0 | ( (int)wchar >> 18 );
utf8[len++] = 0x80 | ( (wchar >> 12) & 0x3f );
utf8[len++] = 0x80 | ( (wchar >> 6) & 0x3f );
utf8[len++] = 0x80 | ( wchar & 0x3f );
}

char *q = new char[40];
char *p = utf8;
for (int i = 0;i < 3;i++)
{
char *q = new char[40];
sprintf(q,"%x",*p++);

strName += "%";

strName += q;
}

len = 0;
}
strName.Replace(L"ffffff",L"");

return strName;
}

 

转载于:https://www.cnblogs.com/nonine/p/3182444.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值