Excel VBA - 在Windows和macOS下运行的encodeURL替换

时间:2017-12-05 18:56:41

标签: excel vba macos urlencode

问题是我需要从Windows版本的Excel 2013/1016中生成 encodeURL 生成的来自VBA的URL编码数据。只有我需要支持旧版本和/或macOS。此功能既不适用于macOS,也不存在于旧版本中。

由于我找不到 encodeURL 的完全正常替代品,我发布我的解决方案以防其他人需要相同的内容。这是我在stackoverflow和其他地方找到的2个或更多代码的改编。

Option Explicit

''=============================================================
'' EncodeURI -- encodeURL replacement so that it works under macOS
''=============================================================
Function EncodeURI(ByVal sStr As String) As String

    Dim i As Long
    Dim a As Long
    Dim res As String
    Dim code As String

res = ""
For i = 1 To Len(sStr)
    a = AscW(Mid(sStr, i, 1))
    Select Case a
    Case 97 To 122, 65 To 90, 48 To 57, 45, 46, 95, 126
        code = Mid(sStr, i, 1)
    Case 32
        code = "%20" '"+"
    Case 0 To 127
        code = EncodeByte(CInt(a))
    Case 128 To 2047
        code = EncodeByte(((a \ 64) Or 192))
        code = code & EncodeByte(((a And 63) Or 128))
    Case Else
        code = EncodeByte(((a \ 144) Or 234))
        code = code & EncodeByte((((a \ 64) And 63) Or 128))
        code = code & EncodeByte(((a And 63) Or 128))
    End Select
    res = res & code
Next i
EncodeURI = res
End Function

''=============================================================
'' URL encode single byte
''=============================================================
Private Function EncodeByte(val As Integer) As String
    Dim res As String
    res = "%" & Right("0" & Hex(val), 2)
    EncodeByte = res
End Function

上述代码生成(AFAIK)与 encodeURL 相同的结果。

随意使用,分享,充实和评论。

0 个答案:

没有答案