URLEncode_udf[转换字符为ANSI|Unicode UTF 8(16)URL编码及逆转还原]

修改_StringToEncode函数,添加一个参数,以输出形如“2D 4E 87 65 41 00 42 00 43 00 31 00 32 00 33 00”
顺便修改了函数命名

;例子:
$str = "?a测试test_搜索 abc +1234?百度. "
$str1 = _StringToEncode($str)
MsgBox(0, '_StringToEncode _EncodeToString 转换前后', $str & @CRLF & $str1 & @CRLF & _EncodeToString($str1))
;ShellExecute('http://www.baidu.com/s?wd=' & $str1)
;例子:
$str2 = 'http://www.autoitx.com'
$str21 = _StringToEncode($str2, 1, 1)
MsgBox(0, '_StringToEncode _EncodeToString 转换前后', $str2 & @CRLF & $str21 & @CRLF & _EncodeToString($str21))

$str = '中文ABC123'
MsgBox(0, '_StringToEncode 转换前后', $str & @CRLF & _StringToEncode($str, 2, 1, ' '))
;例子:
$str = "测试test_.,;[]AB C012.0好"
$str1 = _StringToUnicodeEncode($str)
$str4 = _UnicodeEncodeToString($str1)
MsgBox(0, '_StringToUnicodeEncode _UnicodeEncodeToString 转换前后', $str & @CRLF & $str1 & @CRLF & $str4)



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

Func _EncodeToString($sEncode, $Encode = 1)
 ;afan 提示:转换经ANSI;GB2312;URL;unicode等格式编码后的字符串为原始字符串
 ;$sEncode - 编码字符串
 ;$Encode - [可选参数]URL编码格式 ;1 (默认) = ANSI ;2 = UTF16 小 ;3 = UTF16 大 ;4 = UTF8
 ;返回值:成功 - 返回编码字符串的原始字符串; 失败 - 返回原字符串并设置 @Error = 1

 Local $Rstr = $sEncode, $aSR, $str_Tmp, $i
 ;$Rstr = StringReplace($sEncode, '+', ' ') ;转换+为空格,也可不要此行
 $aSR = StringRegExp($Rstr, '(?:%\w{2})+', 3)
 If @error Then Return SetError(1, 0, $Rstr)
 For $i = 0 To UBound($aSR) - 1
 $str_Tmp = BinaryToString('0x' & StringReplace($aSR[$i], '%', ''), $Encode)
 $Rstr = StringReplace($Rstr, $aSR[$i], $str_Tmp, 1)
 Next
 Return $Rstr
EndFunc ;==>_EncodeToString

Func _StringToUnicodeEncode($str, $sPrefix = '&#x', $sSuffix = ';')
 ;afan 提示:转换字符串为Unicode UTF 编码
 ;$str - 需转换的字符串
 ;$sPrefix - [可选参数]前缀字符
 ;$sSuffix - [可选参数]后缀字符
 ;返回值:成功 - 返回转换后的编码字符串

 Local $EncodedString, $i, $s2d, $sS = StringSplit($str, '')
 For $i = 1 To $sS[0]
 If StringRegExp($sS[$i], '[^\x00-\xff]') Then
 $EncodedString &= $sPrefix & Hex(AscW($sS[$i]), 4) & $sSuffix
 Else
 $EncodedString &= $sS[$i]
 EndIf
 Next
 Return $EncodedString
EndFunc ;==>_StringToUnicodeEncode

Func _UnicodeEncodeToString($sEncode, $sPrefix = '&#x', $sSuffix = ';') 
 ;afan 提示:将 Unicode 编码还原为字符
 ;$sEncode - 编码字符串
 ;$sPrefix - [可选参数]前缀字符
 ;$sSuffix - [可选参数]后缀字符

 Local $Unicode, $i, $S2H, $Us
 $S2H = StringRegExp($sEncode, $sPrefix & '(\w{4})' & $sSuffix, 3)
 If @error Then Return $sEncode
 For $i = 0 To UBound($S2H) - 1
 $Us = ChrW(Dec($S2H[$i])) 
 $Unicode = StringReplace($sEncode, $sPrefix & $S2H[$i] & $sSuffix, $Us, 1)
 $sEncode = $Unicode
 Next
 Return $Unicode
EndFunc ;==>_UnicodeEncodeToString

post数据中的代码转换如:10%E6%9C%883%E6%97%A5 等于10月3日

MsgBox(0, 0, _UnicodeURLEncode('10月3日'))

Func _UnicodeURLEncode($UnicodeURL) ;==>_UnicodeURLEncode
 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 ;==>_UnicodeURLEncode
© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容