Pergunta

Como você URL escapar de um MFC CString?

Foi útil?

Outras dicas

Eu criei uma função wrapper para outras pessoas que podem se deparar com essa solução. Também requer ligando para Wininet.lib e incluindo Wininet.h

    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;
    }

Uso

    CString internetUse = "The Internet is %%4 <pr0n>";

    EscapeURL ( internetUse );

    // internetUse = 0x01538890 "The%20Internet%20is%20%25%254%20%3Cpr0n%3E"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top