功能说明
该函数库提供 安全、完整支持双字节字符(如中文、日文、韩文等)的 URL 编码功能,适用于 AutoIt 脚本在与 Web 服务交互中处理非ASCII字符场景。
- 支持 Unicode 编码到 UTF-8 的逐字符转换
- 遵循 RFC 3986 的 URL 编码规范
- 适用于浏览器等常见URL转码场景的对比测试
使用方法
- 引入脚本文件(或将函数粘贴到你的项目中)
- 使用
URLEncode(字符串)
函数获取编码后的 URL - 可通过
ConsoleWrite
打印验证效果
示例代码
; 原始 URL,含中文路径
Local $sOriginalURL = "http://127.0.0.1/htdocs/2023/08/06/使用批处理脚本修改服务器密码/"
; 模拟浏览器编码后URL
Local $sBrowserEncodedURL = "http://127.0.0.1/htdocs/2023/08/06/%e4%bd%bf%e7%94%a8%e6%89%b9%e5%a4%84%e7%90%86%e8%84%9a%e6%9c%ac%e4%bf%ae%e6%94%b9%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%af%86%e7%a0%81/"
; 执行自定义编码
Local $sEncodedURL = URLEncode($sOriginalURL)
; 输出结果对比
ConsoleWrite("原始访问地址: " & $sOriginalURL & @CRLF)
ConsoleWrite("浏览器编码之后的URL: " & $sBrowserEncodedURL & @CRLF)
ConsoleWrite("自定义函数编码的URL: " & $sEncodedURL & @CRLF)
核心函数代码
; 函数名称: URLEncode
; 功能描述: 将字符串编码为URL安全格式,支持双字节字符
; 输入参数: $sInput - 需编码的原始字符串
; 返回值: 编码后的URL字符串
Func URLEncode($sInput)
Local $sEncoded = "", $iCharCode, $sHexCode
For $i = 1 To StringLen($sInput)
$iCharCode = AscW(StringMid($sInput, $i, 1))
; 判断是否为无需编码的保留字符
If ($iCharCode >= 48 And $iCharCode <= 57) Or _
($iCharCode >= 65 And $iCharCode <= 90) Or _
($iCharCode >= 97 And $iCharCode <= 122) Or _
StringInStr("-_.~!*'();:@&=+$,/?#[]", Chr($iCharCode)) Then
$sEncoded &= Chr($iCharCode)
Else
; 编码为UTF-8后再进行百分号编码
$sEncoded &= UnicodeToUTF8($iCharCode)
EndIf
Next
Return $sEncoded
EndFunc
; 函数名称: UnicodeToUTF8
; 功能描述: 将Unicode字符转换为UTF-8字节流后进行百分号编码
; 输入参数: $iUnicode - 单个字符的Unicode码点
; 返回值: UTF-8编码形式的百分号字符串(如 %E4%BD%A0)
Func UnicodeToUTF8($iUnicode)
Local $sUTF8 = ""
If $iUnicode < 0x80 Then
$sUTF8 = "%" & StringLower(Hex($iUnicode, 2))
ElseIf $iUnicode < 0x800 Then
$sUTF8 = "%" & StringLower(Hex(BitAND(BitShift($iUnicode, 6), 0x1F) + 0xC0, 2))
$sUTF8 &= "%" & StringLower(Hex(BitAND($iUnicode, 0x3F) + 0x80, 2))
Else
$sUTF8 = "%" & StringLower(Hex(BitAND(BitShift($iUnicode, 12), 0x0F) + 0xE0, 2))
$sUTF8 &= "%" & StringLower(Hex(BitAND(BitShift($iUnicode, 6), 0x3F) + 0x80, 2))
$sUTF8 &= "%" & StringLower(Hex(BitAND($iUnicode, 0x3F) + 0x80, 2))
EndIf
Return $sUTF8
EndFunc
控制台输出(示例)
原始访问地址: http://127.0.0.1/htdocs/2023/08/06/使用批处理脚本修改服务器密码/
浏览器编码之后的URL: http://127.0.0.1/htdocs/2023/08/06/%e4%bd%bf%e7%94%a8%e6%89%b9%e5%a4%84%e7%90%86...
自定义函数编码的URL: http://127.0.0.1/htdocs/2023/08/06/%e4%bd%bf%e7%94%a8%e6%89%b9%e5%a4%84%e7%90%86...
总结
该函数非常适用于:
- 自主实现 HTTP 通信、模拟请求等网络开发场景
- 替代浏览器转码,在 AutoIt 脚本中保留完整中文路径或参数信息
- 实现更可控、更可读的 URL 编码流程