url会把一些特殊的字符例如#()%@&^转换成这样%23%28%29%25@%26%5E的编码,请问是根据什么算法转换的,有没有源代码,或者给出算法也可以,谢谢不知道你指的url是具体指什么。 但是我想这一功能够用字符串替换功能来实现。 思路:查找 替换 # %23 ( %23 反之亦然。 用下面的函数来实现这一功能。 '******************************************** Public Function StrReplaceA( _ strMain As String, _ astrFind, _ astrReplaceWith) '目的 :批量替换字符串 '相关模块:Replace , GetLBUB '输入:StrMain -给定的主串 ' astrFind() - 查找子串数组 ' astrReplaceWith() -替换成数组 '返回:如果操作成功完成,返回0,否则返回Err.Number On Error GoTo PROC_ERR Dim lngErr As Long Dim lngLBOfFind As Long Dim lngUBOfFind As Long Dim lngLBOfReplace As Long Dim lngUBOfReplace As Long '判断给定的查找串数组合法性. lngErr = GetLBUB(lngLBOfFind, lngUBOfFind, astrFind) If lngErr <> 0 Then Debug.Print "StrReplaceA. 给定的查找串数组不合法!" GoTo PROC_EXIT End If '*************** '判断给定的替换数组的合法性 lngErr = GetLBUB(lngLBOfReplace, lngUBOfReplace, astrReplaceWith) If lngErr <> 0 Then Debug.Print "StrReplaceA. 给定的替换数组不合法!" GoTo PROC_EXIT
End If '*************** '判断查找串和替换串数组的元素个数是否相等 If lngLBOfFind <> lngLBOfReplace Or _ lngUBOfFind <> lngUBOfReplace Then '指定-1:说明错误发生 lngErr = -1 Debug.Print "StrReplaceA. 指定的查找数组和替换数组元素个数不相等" End If'*************** '[通过参数有效性检测,处理正事] Dim lngLoop As Long Dim strTemp As String strTemp = strMainFor lngLoop = lngLBOfFind To lngUBOfFind '*关键外部调用:Replace strTemp = Replace(strTemp, astrFind(lngLoop), astrReplaceWith(lngLoop))
Next'*************** '*返回结果 strMain = strTemp PROC_EXIT: StrReplaceA = lngErrExit Function PROC_ERR: lngErr = Err.Number Debug.Print "StrReplaceA.Err(" & Err.Number & "):" & Err.Description GoTo PROC_EXIT End Function '******************************************** '******************************************** Function GetLBUB(lngLB As Long, lngUB As Long, ParamArray avntParamArray()) '目的: 得到一个数组的上界和下界 '相关模块: '输入: '返回:如果操作成功完成,返回0,否则返回Err.Number On Error GoTo PROC_ERR Dim lngErr As Long lngLB = LBound(avntParamArray(0)) lngUB = UBound(avntParamArray(0))
PROC_EXIT: GetLBUB = lngErrExit Function PROC_ERR: lngErr = Err.Number Debug.Print "GetLBUB.Err(" & Err.Number & "):" & Err.Description GoTo PROC_EXIT End Function'********************************************'实例说明:#()%@&^转换成这样%23%28%29%25%26 '注意:我发现这个%比较特殊,因为它在右边也出现了,你必须把%放在查找串的第一位 dim astrFind,astrReplace,strMain '得到你要处理的串 strMain="this is a test #[email protected]([email protected]()%&^www.softboyzhou.com" '*'注意:我发现这个%比较特殊,因为它在右边也出现了,你必须把%放在查找串的第一位 astrFind= array("%", "(", ")", "#", "@", "&", "^") '下面是我任意写的数字,根据你的详细需要准确填写 astrReplace=array("%23","%24","%29","%25","%26","%27","%28") dim lngErr Dim lngErr ''*关键外部调用:StrReplaceA lngErr = StrReplaceA(strMain, astrFind, astrReplace) If lngErr = 0 Then MsgBox strMain End If'*************** 希望能够对你有所帮助 '***************'******************************************** '对不起,放一点广告,对您带来的不便敬请原谅! 广告:我的第一个Visual Basic 6.0作品,欢迎大家试用,注册用户得到全部源代码。一、EasyDialog能够做什么? (为了增强Windows通用打开/保存对话框,能够快速的打开经常访问的文件夹或者文件) 一、快速地在通用打开/保存对话框中打开你经常访问的文件夹/文件。 二、快速地在Windows Explorer中打开经常访问的文件夹/文件。 三、快速地在IE浏览器打开你经常访问的网站。 四、快速地给你的朋友发Email 五、能够使您方便地按照逻辑分类来组织和管理您的文件夹/文件,您经常访问的网址,您的Email地址。'******************************************** '*下载EasyDialog: http://www.softboyzhou.com/download/EasyDialog.asp '*************** '*购买EasyDialog: http://www.softreg.com.cn/shareware_view.asp?id=/7148D197-1C1D-4E84-B92A-EE2CC07D27C0/ '*************** '*给我写信:有什么问题请来信。 [email protected]
谢谢各位了,我找到了 代码如下,一起分享 Public Function URLEncode(strInput As String) As String Dim strOutput As String Dim intAscii As Integer Dim i As Integer For i = 1 To Len(strInput) intAscii = Asc(Mid(strInput, i, 1)) If ((intAscii < 58) And (intAscii > 47)) Or _ ((intAscii < 91) And (intAscii > 64)) Or _ ((intAscii < 123) And (intAscii > 96)) Then strOutput = strOutput & Chr$(intAscii) Else strOutput = strOutput & _ IIf(intAscii < 16, "%0", "%") & _ Trim$(Hex$(intAscii)) End If Next URLEncode = strOutput End Function 一个老外站的,照他代码看"*"这个字符也要转换的,可我截的包这个字符没有转换,不知道怎么回事,残念。
但是我想这一功能够用字符串替换功能来实现。
思路:查找 替换
# %23
( %23
反之亦然。
用下面的函数来实现这一功能。
'********************************************
Public Function StrReplaceA( _
strMain As String, _
astrFind, _
astrReplaceWith)
'目的 :批量替换字符串
'相关模块:Replace , GetLBUB
'输入:StrMain -给定的主串
' astrFind() - 查找子串数组
' astrReplaceWith() -替换成数组
'返回:如果操作成功完成,返回0,否则返回Err.Number
On Error GoTo PROC_ERR
Dim lngErr As Long
Dim lngLBOfFind As Long
Dim lngUBOfFind As Long
Dim lngLBOfReplace As Long
Dim lngUBOfReplace As Long
'判断给定的查找串数组合法性.
lngErr = GetLBUB(lngLBOfFind, lngUBOfFind, astrFind)
If lngErr <> 0 Then
Debug.Print "StrReplaceA. 给定的查找串数组不合法!"
GoTo PROC_EXIT
End If
'***************
'判断给定的替换数组的合法性
lngErr = GetLBUB(lngLBOfReplace, lngUBOfReplace, astrReplaceWith)
If lngErr <> 0 Then
Debug.Print "StrReplaceA. 给定的替换数组不合法!"
GoTo PROC_EXIT
End If
'***************
'判断查找串和替换串数组的元素个数是否相等
If lngLBOfFind <> lngLBOfReplace Or _
lngUBOfFind <> lngUBOfReplace Then
'指定-1:说明错误发生
lngErr = -1
Debug.Print "StrReplaceA. 指定的查找数组和替换数组元素个数不相等"
End If'***************
'[通过参数有效性检测,处理正事]
Dim lngLoop As Long
Dim strTemp As String
strTemp = strMainFor lngLoop = lngLBOfFind To lngUBOfFind
'*关键外部调用:Replace
strTemp = Replace(strTemp, astrFind(lngLoop), astrReplaceWith(lngLoop))
Next'***************
'*返回结果
strMain = strTemp
PROC_EXIT:
StrReplaceA = lngErrExit Function
PROC_ERR:
lngErr = Err.Number
Debug.Print "StrReplaceA.Err(" & Err.Number & "):" & Err.Description
GoTo PROC_EXIT
End Function
'********************************************
'********************************************
Function GetLBUB(lngLB As Long, lngUB As Long, ParamArray avntParamArray())
'目的: 得到一个数组的上界和下界
'相关模块:
'输入:
'返回:如果操作成功完成,返回0,否则返回Err.Number
On Error GoTo PROC_ERR
Dim lngErr As Long
lngLB = LBound(avntParamArray(0))
lngUB = UBound(avntParamArray(0))
PROC_EXIT:
GetLBUB = lngErrExit Function
PROC_ERR:
lngErr = Err.Number
Debug.Print "GetLBUB.Err(" & Err.Number & "):" & Err.Description
GoTo PROC_EXIT
End Function'********************************************'实例说明:#()%@&^转换成这样%23%28%29%25%26
'注意:我发现这个%比较特殊,因为它在右边也出现了,你必须把%放在查找串的第一位
dim astrFind,astrReplace,strMain
'得到你要处理的串
strMain="this is a test #[email protected]([email protected]()%&^www.softboyzhou.com"
'*'注意:我发现这个%比较特殊,因为它在右边也出现了,你必须把%放在查找串的第一位
astrFind= array("%", "(", ")", "#", "@", "&", "^")
'下面是我任意写的数字,根据你的详细需要准确填写
astrReplace=array("%23","%24","%29","%25","%26","%27","%28")
dim lngErr
Dim lngErr
''*关键外部调用:StrReplaceA
lngErr = StrReplaceA(strMain, astrFind, astrReplace)
If lngErr = 0 Then
MsgBox strMain
End If'***************
希望能够对你有所帮助
'***************'********************************************
'对不起,放一点广告,对您带来的不便敬请原谅!
广告:我的第一个Visual Basic 6.0作品,欢迎大家试用,注册用户得到全部源代码。一、EasyDialog能够做什么?
(为了增强Windows通用打开/保存对话框,能够快速的打开经常访问的文件夹或者文件)
一、快速地在通用打开/保存对话框中打开你经常访问的文件夹/文件。
二、快速地在Windows Explorer中打开经常访问的文件夹/文件。
三、快速地在IE浏览器打开你经常访问的网站。
四、快速地给你的朋友发Email
五、能够使您方便地按照逻辑分类来组织和管理您的文件夹/文件,您经常访问的网址,您的Email地址。'********************************************
'*下载EasyDialog:
http://www.softboyzhou.com/download/EasyDialog.asp
'***************
'*购买EasyDialog:
http://www.softreg.com.cn/shareware_view.asp?id=/7148D197-1C1D-4E84-B92A-EE2CC07D27C0/
'***************
'*给我写信:有什么问题请来信。
[email protected]
代码如下,一起分享
Public Function URLEncode(strInput As String) As String
Dim strOutput As String
Dim intAscii As Integer
Dim i As Integer For i = 1 To Len(strInput)
intAscii = Asc(Mid(strInput, i, 1))
If ((intAscii < 58) And (intAscii > 47)) Or _
((intAscii < 91) And (intAscii > 64)) Or _
((intAscii < 123) And (intAscii > 96)) Then
strOutput = strOutput & Chr$(intAscii)
Else
strOutput = strOutput & _
IIf(intAscii < 16, "%0", "%") & _
Trim$(Hex$(intAscii))
End If
Next
URLEncode = strOutput
End Function
一个老外站的,照他代码看"*"这个字符也要转换的,可我截的包这个字符没有转换,不知道怎么回事,残念。