Использование VB6. Это не сложно свернуть, но я подумал, был ли там заранее подготовленный?Есть ли доступная библиотека COM для разрешения кодировки URL?
ответ
Подскажите комментарий Боба: Google нашел эту упаковку для UrlEscape в newsgroup post от 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
Отказ от ответственности: Я не пробовал этот код сам.
Мне придется сломать тест, но быстрый тест отлично работает. Спасибо :) –
Эта библиотека не избегает всех символов и все равно приведет к проблемам. Например, если вы сравните вывод с методом .NET Framework «System.Web.HttpUtility.UrlEncode», у вас будут совершенно разные результаты. –
Вы должны использовать CoInternetParseUrl(), с URL_ENCODE.
Образец из MSDN, измененный для ваших целей. Конечно, вам нужно будет выяснить, как вызвать CoInternetParseUrl() из VB6, но вы, похоже, на пути к этому.
#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...
}
Вы можете использовать PARSE_ENCODE вместо PARSE_CANONICALIZE, в зависимости от ваших потребностей.
Кроме того, рассмотрите возможность использования google-url. Может быть сложно, так как это C++, а не COM.
Хороший совет. Я бы поднял вас, но мне нужно еще 2 re rofl :) –
Является ли это мошенничеством для меня, чтобы повысить ваш вопрос из-за этого? :) –
Обман слишком силен словом ... Возможно, «Конфликт интересов»;) –
Я еще не нашел его - но есть фрагменты кода, которые делают это. – quamrana
Вы можете посмотреть на API-вызовы UrlEscape и UrlUnescape в файле shlwapi.dll. – Bob77
Роллинг - это ужасная идея. Вы ошибетесь. Используйте библиотеку. –