使用VB6。自己动手并不难,但我想知道那里是否有预建的?
问问题
991 次
2 回答
4
由 Bob 的评论提示:Google在Karl Peterson的新闻组帖子中找到了UrlEscape的包装器。
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
免责声明:我自己没有尝试过这段代码。
于 2010-01-02T19:43:03.297 回答
2
您应该使用带有 URL_ENCODE 的CoInternetParseUrl()。
来自 MSDN 的示例,根据您的目的进行了修改。当然,您必须弄清楚如何从 VB6 中调用 CoInternetParseUrl(),但您似乎正在努力实现这一目标。
#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。
于 2010-01-02T20:15:35.760 回答