找回密码
 加入
搜索
查看: 1465|回复: 3

[AU3基础] [已解决]求URL编码 特殊字符转换问题

[复制链接]
发表于 2019-11-9 11:09:26 | 显示全部楼层 |阅读模式
本帖最后由 xwei21 于 2019-11-9 17:52 编辑

我采用afan的url编码函数,但是遇到特殊字符 : / 等无法转换为 %3A %2F 等,应该怎样修改函数才能转换这些特殊字符,求教高手,谢谢

MsgBox(32, "", _UnicodeURLEncode('/成都:'))

Func _UnicodeURLEncode($UnicodeURL)
  Local $UnicodeBinaryLength, $UnicodeBinary, $UnicodeBinary2
  $UnicodeBinary = StringToBinary($UnicodeURL, 4)
  $UnicodeBinary2 = StringReplace($UnicodeBinary, '0x', '', 1)
  $UnicodeBinaryLength = StringLen($UnicodeBinary2)
  Local $EncodedString, $UnicodeBinaryChar, $EncodedString
  For $i = 1 To $UnicodeBinaryLength Step 2
  $UnicodeBinaryChar = StringMid($UnicodeBinary2, $i, 2)
  If StringInStr("$-_.+!*'(),;/?:@=&abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890", BinaryToString('0x' & $UnicodeBinaryChar, 4)) Then
    $EncodedString &= BinaryToString('0x' & $UnicodeBinaryChar)
  Else
  $EncodedString &= '%' & $UnicodeBinaryChar
  EndIf
  Next
  Return $EncodedString
EndFunc
发表于 2019-11-9 16:33:29 | 显示全部楼层
本帖最后由 w60711 于 2019-11-9 16:36 编辑

这个也无法...qq
$sStr = '/成都:'
$encode = _Conversion($sStr,0)
$decode = _Conversion($encode,1)

MsgBox(0,'encodeURI',$encode)
MsgBox(0,'decodeURI',$decode)


Func _Conversion($string,$flg)
        $oSC = ObjCreate("ScriptControl")
        $oSC.language = "JavaScript"
        If $flg = 0 Then
                        Return $oSC.eval("encodeURI('" & $string & "');")
        Else
                        Return $oSC.eval("decodeURI('" & $string & "');")
        EndIf
EndFunc

发表于 2019-11-9 16:41:25 | 显示全部楼层
本帖最后由 w60711 于 2019-11-9 16:42 编辑

嗯...我搞错意思了
你应该是要这样?

MsgBox(0,0,_StringToEncode("/成都:",1,1))

Func _StringToEncode($str, $Encode = 1, $AllFlag = 0, $sPrefix = '%')
        ;afan 提示:转换字符串为ANSI;GB2312;URL;unicode等格式编码
        ;$str - 需转换的字符串
        ;$Encode - [可选参数]编码格式: 1(默认) = ANSI; 2 = UTF16 小; 3 = UTF16 大; 4 = UTF8
        ;$AllFlag - [可选参数] =0 不转换字母及数字(默认); =1 全部转换(字符头http://除外)
        ;$sPrefix - [可选参数]编码首字符
        ;返回值:成功 - 返回转换后的编码字符串; 失败 - 设置 @Error = 1

        Local $str_s = StringRegExpReplace($str, '^\s*(?i)(http://).+', '$1')
        If Not @extended Then $str_s = ''
        If @extended Then $str = StringRegExpReplace($str, '^\s*(?i)http://', '')
        Local $sOut, $i, $sS2B, $aSR
        If $AllFlag Then
                $sS2B = StringTrimLeft(StringToBinary($str, $Encode), 2)
                $sOut = StringRegExpReplace($sS2B, '..', $sPrefix & '$0')
        Else
                $sOut = $str
                $aSR = StringRegExp($str, '\W+', 3)
                If Not @Error Then
                        For $i = 0 To UBound($aSR) - 1
                                $sS2B = StringTrimLeft(StringToBinary($aSR[$i], $Encode), 2)
                                $sOut = StringReplace($sOut, $aSR[$i], StringRegExpReplace($sS2B, '..', $sPrefix & '$0'), 1)
                        Next
                EndIf
        EndIf
        If $sPrefix = ' ' Then $sOut = StringRegExpReplace($sOut, '^\h+|\h+

, '')
        ;$sOut = StringReplace($sOut, '%20', '+') ;转换空格的编码为'+'号,也可不要此行
        Return $str_s & $sOut
EndFunc   ;==>_StringToEncode

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2019-11-9 17:51:42 | 显示全部楼层
非常感谢,困扰我很久的问题解决了。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-25 19:47 , Processed in 0.079070 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表