代码之家  ›  专栏  ›  技术社区  ›  Raul Agrait

转义MFC字符串的URL

  •  4
  • Raul Agrait  · 技术社区  · 17 年前

    2 回复  |  直到 17 年前
        1
  •  7
  •   Serge Wautier    17 年前
        2
  •  0
  •   Sparx    8 年前

        bool EscapeURL ( CString& url, DWORD options = ICU_DECODE | ICU_ENCODE_PERCENT )
        {
            DWORD bytes = url.GetLength () + 1;
            LPTSTR escapedString = new TCHAR[bytes + 1];
            escapedString[0] = 0;
    
            // First read will generate the correct byte count for the return string 
            //
            bool result = InternetCanonicalizeUrl ( url.GetBuffer (), escapedString, &bytes, options );
            if ( !result )
            {
                // Resize the String
                //
                delete [] escapedString;
                escapedString = new TCHAR[bytes];
                escapedString[0] = 0;
    
                result = InternetCanonicalizeUrl ( url.GetBuffer (), escapedString, &bytes, options );
            }
    
            if ( result )
            {
                url = escapedString;
                delete [] escapedString; // Thanks The Steve
            }
            else
            {
                // Optional
                // If the call fails return the message in the url
                //
                DWORD errorMessageID = ::GetLastError ();
                LPSTR messageBuffer = nullptr;
                size_t size = FormatMessageA ( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
                                         NULL, errorMessageID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageBuffer, 0, NULL);
    
                std::string message ( messageBuffer, size );
    
                LocalFree ( messageBuffer );
    
                url = message.c_str ();
            }
    
            return result;
        }
    

    用法

        CString internetUse = "The Internet is %%4 <pr0n>";
    
        EscapeURL ( internetUse );
    
        // internetUse = 0x01538890 "The%20Internet%20is%20%25%254%20%3Cpr0n%3E"
    
    推荐文章