URL escapar strings MFC
Pergunta
Como você URL escapar de um MFC CString?
Solução
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