找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 5339|回复: 0

[分享] 用VC(MFC)实现ASP中的Server.URLEncode与URLDecode

[复制链接]

1214

主题

352

回帖

11

精华

管理员

菜鸟

积分
93755

贡献奖关注奖人气王精英奖乐于助人勋章

发表于 2010-6-26 08:14:58 | 显示全部楼层 |阅读模式
今天做程序因为要用到UrlEncode和UrlDecode,所以到网上找了一下,想用个现成的。找来找去,发现郑昀老师的代码思路是最清晰的,也很和胃口,但可惜的是只有一半 —— UrlEncode(),又看了看其他人写的,都不怎么样。所以一咬牙,干脆自己动手把UrlDecode()补上了,再做成头文件,以后用起来也方便(懒人啦)。看见还有很多人搜索,所以贴出来一份给其他懒人。代码如下:inline BYTE toHex(const BYTE &x)
{
return x > 9 ? x + 55: x + 48;
}
inline BYTE toByte(const BYTE &x)
{
return x > 57? x - 55: x - 48;
}
CString URLDecode(CString sIn)
{
CString sOut;
const int nLen = sIn.GetLength() + 1;
register LPBYTE pOutTmp = NULL;
LPBYTE pOutBuf = NULL;
register LPBYTE pInTmp = NULL;
LPBYTE pInBuf =(LPBYTE)sIn.GetBuffer(nLen);
//alloc out buffer
pOutBuf = (LPBYTE)sOut.GetBuffer(nLen);if(pOutBuf)
{
   pInTmp   = pInBuf;
   pOutTmp = pOutBuf;
   // do encoding
   while (*pInTmp)
   {
    if('%'==*pInTmp)
    {
     pInTmp++;
     *pOutTmp++ = (toByte(*pInTmp)%16<<4) + toByte(*(pInTmp+1))%16;//高4位+低4位
     pInTmp++;
    }
    else if('+'==*pInTmp)
     *pOutTmp++ = ' ';
    else
     *pOutTmp++ = *pInTmp;
    pInTmp++;
   }
   *pOutTmp = '\0';
   sOut.ReleaseBuffer();
}
sIn.ReleaseBuffer();return sOut;
}
CString URLEncode(CString sIn)
{
CString sOut;
const int nLen = sIn.GetLength() + 1;
register LPBYTE pOutTmp = NULL;
LPBYTE pOutBuf = NULL;
register LPBYTE pInTmp = NULL;
LPBYTE pInBuf =(LPBYTE)sIn.GetBuffer(nLen);
//alloc out buffer
pOutBuf = (LPBYTE)sOut.GetBuffer(nLen*3);if(pOutBuf)
{
   pInTmp   = pInBuf;
   pOutTmp = pOutBuf;
   // do encoding
   while (*pInTmp)
   {
    if(isalnum(*pInTmp) || '-'==*pInTmp || '_'==*pInTmp || '.'==*pInTmp)
     *pOutTmp++ = *pInTmp;
    else if(isspace(*pInTmp))
     *pOutTmp++ = '+';
    else
    {
     *pOutTmp++ = '%';
     *pOutTmp++ = toHex(*pInTmp>>4);//高4位
     *pOutTmp++ = toHex(*pInTmp%16);//低4位
    }
    pInTmp++;
   }
   *pOutTmp = '\0';
   sOut.ReleaseBuffer();
}
sIn.ReleaseBuffer();return sOut;
}
【VB】QQ群:1422505加的请打上VB好友
【易语言】QQ群:9531809  或 177048
【FOXPRO】QQ群:6580324  或 33659603
【C/C++/VC】QQ群:3777552
【NiceBasic】QQ群:3703755
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表