« 前一篇:MacAddr
后一篇:TermProcess »

UrlEscape @ 2/10/2006

技术类
此函数将字符串编码使其可用于URL请求。

此函数将除了 "-_." 之外的所有非字母数字字符替换成百分号(%)后跟两位十六进制数,空格则编码为"%20"。此编码与RFC1738 编码相同,与 WWW 表单 POST 数据的编码方式在空格的处理上不同,同时与 application/x-www-form-urlencoded 的媒体类型编码方式在空格的处理上不同。(后二者把空格编码为"+")
HRESULT UrlEscape(/* IN */ LPCSTR strUrl, /* OUT */ LPSTR &strEscaped) {
    if(strEscaped != NULL) {
        return E_FAIL;
    }
    int nLength = strlen(strUrl) * 3 + 1;
    strEscaped = new CHAR[nLength];
    memset(strEscaped, 0, nLength);
    for(CONST CHAR* p=strUrl; *p != 0; ++ p) {
        if(*p == '+') {
            strcat(strEscaped, "%2B");
        } else if(*p == ' ') {
            strcat(strEscaped, "%20");
        } else if(*p == '%') {
            strcat(strEscaped, "%25");
        } else if(*p == '=') {
            strcat(strEscaped, "%3D");
        } else if(*p == '&') {
            strcat(strEscaped, "%26");
        } else if(*p<33 || *p>127) {
            CHAR chTemp = 0;
            CHAR szTemp[3];

            strcat(strEscaped, "%");
            chTemp = (CHAR)(((*p>>4)&0x0F) + '0');
            if(chTemp > '9') {
                chTemp += 7u;
            }
            sprintf(szTemp, "%c", chTemp);
            strcat(strEscaped, szTemp);

            chTemp = (CHAR)((*p &0x0F) + '0');
            if(chTemp > '9') {
                chTemp += 7u;
            }
            sprintf(szTemp, "%c", chTemp);
            strcat(strEscaped, szTemp);
        } else {
            CHAR szTemp[2];
            sprintf(szTemp, "%c", *p);
            strcat(strEscaped, szTemp);
        }
    }
    return S_OK;
}
发布于 2/10/2006 11:38:01 | 评论:0

看帖要回帖...

categories
archives
links
statistics
  • 网志数:1168
  • 评论数:2011