原创:VC下实现UrlEncode(javascript之escape)功能(VC 为 UNICODE编码)

VC 为 UNICODE编码,没有考虑非UNICODE编码!

 

char hexs[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
CString URLEncode(CString sIn)
{
    CString sOut;
    int nLen = sIn.GetLength();    
    PBYTE pInBuf = (PBYTE)sIn.GetBuffer(0);
    BYTE* pOutBuf=new BYTE[nLen*7];
    memset(pOutBuf,0,nLen*7);
    int n=0;
    BYTE A,B;
    for(int i=0;i<nLen;i++)
    {    BYTE a = pInBuf[i*2];
        BYTE b = pInBuf[i*2+1];
        if(b>0)
        {    

            pOutBuf[n++]='%';
            pOutBuf[n++]='u';
            
            A=b&0xf;
            B=(b&0xf0)>>4;
            pOutBuf[n++] = hexs[B];
            pOutBuf[n++] = hexs[A];

            A=a&0xf;
            B=(a&0xf0)>>4;
            pOutBuf[n++] = hexs[B];
            pOutBuf[n++] = hexs[A];
        }
        else if(a<'*'||a==','||(a>'9'&&a<'@')||(a>'Z'&&a<'_')||a=='`'||a>'z')
        {
            pOutBuf[n++]='%';
            
            A=a&0xf;
            B=(a&0xf0)>>4;
            
            pOutBuf[n++] = hexs[B];
            pOutBuf[n++] = hexs[A];
        }
        else
        {
            pOutBuf[n++]=a;
        }
    }

    sOut=CString(pOutBuf);
    sIn.ReleaseBuffer();
    delete[] pOutBuf;
    return sOut;
}

posted @ 2011-08-23 21:13  吾非无心  阅读(907)  评论(0编辑  收藏  举报