2009-12-31 17 views
3

Utilisation de VB6. Ce n'est pas difficile de rouler les vôtres, mais je me demandais s'il y en avait un préfabriqué?Existe-t-il une bibliothèque COM accessible pour permettre le codage d'URL?

+0

Je n'en ai pas encore trouvé - mais il y a des extraits de code qui font cela. – quamrana

+2

Vous pouvez consulter les appels d'API UrlEscape et UrlUnescape dans shlwapi.dll. – Bob77

+1

Rouler le vôtre est une idée terrible. Vous vous tromperez. Utilisez une bibliothèque. –

Répondre

4

Invité par le commentaire de Bob: Google a trouvé cet emballage pour UrlEscape dans un newsgroup post de Karl Peterson.

Private Declare Function UrlEscape Lib "Shlwapi.dll" Alias "UrlEscapeA" (_ 
    ByVal pszURL As String, ByVal pszEscaped As String, ByRef pcchEscaped As Long, _ 
    ByVal dwFlags As Long) As Long 

Private Const URL_DONT_ESCAPE_EXTRA_INFO As Long = &H2000000 

Private Function EscapeURL(ByVal URL As String) As String 
' Purpose: A thin wrapper for the URLEscape API function. ' 
Dim EscTxt As String 
Dim nLen As Long 

' Create a maximum sized buffer. ' 
nLen = Len(URL) * 3 
EscTxt = Space$(nLen) 

If UrlEscape(URL, EscTxt, nLen, URL_DONT_ESCAPE_EXTRA_INFO) = 0 Then 
    EscapeURL = Left$(EscTxt, nLen) 
End If 
End Function 

Désistement: Je n'ai pas essayé ce code moi-même.

+0

Je vais devoir le tester, mais un test rapide fonctionne bien. Merci :) –

+0

Cette bibliothèque n'échappe pas à tous les caractères et entraînera toujours des problèmes. Par exemple, si vous comparez la sortie à la méthode .NET Framework "System.Web.HttpUtility.UrlEncode", vous obtiendrez des résultats complètement différents. –

2

Vous devez utiliser CoInternetParseUrl(), avec URL_ENCODE.

L'exemple de MSDN, modifié pour vos besoins. Bien sûr, vous devrez trouver comment appeler CoInternetParseUrl() à partir de VB6, mais vous semblez bien sur votre chemin à cela.

#include <wininet.h> 

// ... 

WCHAR encoded_url[INTERNET_MAX_URL_LENGTH]; 
DWORD encoded_url_len = ARRAYSIZE(encoded_url); 

// Assumes |url| contains the value you want to encode. 

HRESULT hr = CoInternetParseUrl(url, PARSE_CANONICALIZE, URL_ENCODE, encoded_url, 
         INTERNET_MAX_URL_LENGTH, & encoded_url_len, 0); 
if (SUCCEEDED(hr)) { 
    // Do stuff... 
} 

Vous pouvez utiliser PARSE_ENCODE au lieu de PARSE_CANONICALIZE, en fonction de vos besoins. En outre, envisagez d'utiliser google-url. Peut être difficile car c'est C++ et pas basé sur COM.

+0

Bon conseil. Je vous avais upvote mais j'ai besoin de 2 répétitions de plus :) –

+0

Est-ce que c'est de la triche pour moi d'upvoter votre question à cause de ça? :) –

+0

Tricher est un mot trop fort ... Peut-être "conflit d'intérêts";) –