编码问题,大家帮帮忙

zergtant 2003-07-24 07:37:31
url会把一些特殊的字符例如#()%@&^转换成这样%23%28%29%25@%26%5E的编码,请问是根据什么算法转换的,有没有源代码,或者给出算法也可以,谢谢
...全文
24 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zergtant 2003-07-25
  • 打赏
  • 举报
回复
谢谢各位了,我找到了
代码如下,一起分享
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
一个老外站的,照他代码看"*"这个字符也要转换的,可我截的包这个字符没有转换,不知道怎么回事,残念。。。。
zergtant 2003-07-25
  • 打赏
  • 举报
回复
谢谢,我自己再找找吧
xingsoft 2003-07-24
  • 打赏
  • 举报
回复
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 = strMain

For lngLoop = lngLBOfFind To lngUBOfFind
'*关键外部调用:Replace
strTemp = Replace(strTemp, astrFind(lngLoop), astrReplaceWith(lngLoop))

Next

'***************
'*返回结果
strMain = strTemp
PROC_EXIT:
StrReplaceA = lngErr

Exit 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 = lngErr

Exit 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 #softboy@263.net(softboy@263.net()%&^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/
'***************
'*给我写信:有什么问题请来信。
softboy@263.net


rainstormmaster 2003-07-24
  • 打赏
  • 举报
回复
建议研究一下utf-8编码
zergtant 2003-07-24
  • 打赏
  • 举报
回复
那什么字符转什么不转呀
tangjinn 2003-07-24
  • 打赏
  • 举报
回复
debug.print asc("%")

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧