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?
Répondre
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.
Je vais devoir le tester, mais un test rapide fonctionne bien. Merci :) –
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. –
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.
Bon conseil. Je vous avais upvote mais j'ai besoin de 2 répétitions de plus :) –
Est-ce que c'est de la triche pour moi d'upvoter votre question à cause de ça? :) –
Tricher est un mot trop fort ... Peut-être "conflit d'intérêts";) –
Je n'en ai pas encore trouvé - mais il y a des extraits de code qui font cela. – quamrana
Vous pouvez consulter les appels d'API UrlEscape et UrlUnescape dans shlwapi.dll. – Bob77
Rouler le vôtre est une idée terrible. Vous vous tromperez. Utilisez une bibliothèque. –