在网上找到的UrlEncode方法,都会把url中诸如“:”、“\”都转为成%x形式。  如果C++中没有这种代码,.net中是否会有?

解决方案 »

  1.   

    http://blog.csdn.net/huangkelong/archive/2008/01/03/2023692.aspx
      

  2.   

    %B2%E2%CA%D4
    之类的就是将内存流输出成16进制。
      

  3.   

    一看就知道应该是转化为BASE64的编码了,建议找BASE64算法
      

  4.   

    .net中就是HttpUtility.UrlEncode()
    相应还有UrlDecode()
      

  5.   

    应该不是base64吧,base64不会那么多%的
      

  6.   

    服务器端的话,那就看你用的什么语言了,要是在浏览器里直接用
    var url="http://aaa.com/测试.asp";
    url = encodeURI(url);
    //这里的url就转换好了
      

  7.   

    URL encode, 下面有一个例子:#ifdef _UNICODECString CUrlEncode::UrlEncode(CString sUrl)
    {
    if(sUrl.GetLength()<=0)
    return sUrl;

    CString sRet = sUrl.Left(MAX_ENCODE_LEN);
    try{
    CString sOut;
    CString sIn = sRet;
    const int nLen = sIn.GetLength();

    // do encoding
    const int cTemp = 4 * 3;
    char szTemp[cTemp];
    for (int i = 0; i < nLen; i++){
    TCHAR c = sIn.GetAt(i);
    if(iswascii (c) && iswalnum(c)){
    sOut += c ;
    } else {
    if(_istspace(c)){
    sOut += _T('+') ;
    } else {
    memset(szTemp,0, cTemp);
    toHex(c, szTemp, cTemp);
    sOut += szTemp;
    }
    } }
    sRet = sOut;
    } catch(...){
    //return sRet;
    }

    return sRet;
    }#elseCString CUrlEncode::UrlEncode(CString sUrl)
    {
    if(sUrl.GetLength()<=0)
    return sUrl;

    static char cIn[MAX_ENCODE_LEN+1];
    static char cOut[MAX_ENCODE_LEN+1]; CString sRet = sUrl.Left(MAX_ENCODE_LEN);
    try{
    int nCount = sRet.GetLength();
    memset(cIn,0,sizeof(cIn));
    memset(cOut,0,sizeof(cOut));
    CString sTemp = sRet;

    char* pIn = sTemp.GetBuffer(0);
    if(pIn!=NULL){
    strcpy(cIn,pIn);
    DoUrlEncode(cIn,cOut,MAX_ENCODE_LEN);
    sRet = cOut;
    sRet.ReleaseBuffer();
    }
    } catch(...){
    return sUrl;
    }

    return sRet;
    }#endif
      

  8.   


    base64 编码是 a-zA-Z+=/ 就这些字符
      

  9.   


    char* CUrlEncode::DoUrlEncode(const char *source, char *dest, size_t max)
    {
    static const char *hex = "0123456789abcdef";
    size_t len = 0;
    unsigned char ch;
    char *ret = dest;

    *dest = 0;
    if(!source)
    return dest;

    char cIndex = 0;
    while(len < max - 4 && *source)
    {
    ch = (unsigned char)*source;
    if(*source == ' ')
    *(dest++) = '+';
    else if(isalnum(*source))
    *(dest++) = *source;
    else
    {
    *(dest++) = '%';
    // char in C++ can be more than 8bit
    cIndex = (ch >> 4)&0xF;
    *(dest++) = hex[cIndex];
    //cIndex = ch&0xF;
    cIndex = ch % 16;
    *(dest++) = hex[cIndex];
    }
    ++source;
    }
    *dest = 0;
    return ret;
    }