URLDecode(sIn) 如何处理中文

sccroom 2009-10-04 12:57:31
大家好,今天我遇到了一个问题,就是URL 解密。具体情况看下面
错误信息:
Microsoft VBScript runtime error '800a0005'
Invalid procedure call or argument: 'CHR'
/Inc/Funasp, line 855

代码如下:(其中的一些现实,是我自己DEBUG 用的)
Public Function rrURLDecode(sIn)
Dim s,i,l,c,t,n : s="" : l=Len(sIn)
response.write (sIn & " == " & l & "<br>")
For i=1 To l
c=Mid(sIn,i,1)
response.write ("i=" & i &" = " & c & "<br>")
If c<>"%" Then
s = s & c
Else

c=Mid(sIn,i+1,2) : i=i+2 : t=CInt("&H" & c)

response.write("i="& i & " c=" & c& " t=" & t & " H80=" & &H80 & "<br>")


If t<&H80 Then
s=s & Chr(t)
Else
c=Mid(sIn,i+1,3)

response.write("i="& i & " c=" & c & " s=" & s &"<br>")

If Left(c,1)<>"%" Then
URLDecode=s
Exit Function
Else
c=Right(c,2) : n=CInt("&H" & c)

response.write("i="& i & " c=" & c & " n=" & n & " t=" & t &"<br>")


't=t*256+n-65536
t=t*256+n-47301
response.write("i="& i & " c=" & c & " n=" & n & " t=" & t &"<br>")
s = s & chr(t) : i=i+3
End If
End If
End If
Next
URLDecode=s
response.write ("==> " & s & "<br>")
End Function


已经尝试方式:
1 。 更换网页编码:UTF-8 和 GB2312 ==》 无效
2. CHR 替换为 CHRW 和CHRB ==》 可以过,但是是乱码全是 问号??

3 主要错误步骤在s = s & chr(t) : i=i+3 因为 t 的值是 -4K 多,完全超出了 0-255 的范围,这里好像取得的最大128。

4 网络上,我也看到了,好些人都出现过这种问题,但是没有得到具体的解决方案。是服务器IIS 设置的问题还是脚本那里措了。还是根本不支持中文编码。?? 烦透了。。请各个大侠指教一番,小弟感谢万分。
...全文
272 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
sccroom 2009-10-04
  • 打赏
  • 举报
回复
尝试了,一样的,问题没有解,我先在去装个语言包看能不能解掉这个问题!
hookee 2009-10-04
  • 打赏
  • 举报
回复
windows2003 iis6 中文版
三楼の郎 2009-10-04
  • 打赏
  • 举报
回复
你把"控制面板-〉日期、时间、语言、区域-〉区域和语言选项-〉高级-〉代码页和转换表"里面的936(ANSI/OEM -简体中文GBK)选上,然后在ASP页面的顶部第一行加上<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>这句试试
sccroom 2009-10-04
  • 打赏
  • 举报
回复
能告诉我你妈的操作系统及IIS的版本吗?
sccroom 2009-10-04
  • 打赏
  • 举报
回复
不行, 哎,我几台服务器都是英文版本的,没有一台是中文的。郁闷了,我估计要去安装一台中文的操作系统在尝试一下。
hookee 2009-10-04
  • 打赏
  • 举报
回复
要么用第三方组件转字符集试试看
Chilkat Charset http://www.chilkatsoft.com/chilkatcharset.asp
下载 http://www.chilkatsoft.com/downloads.asp
sccroom 2009-10-04
  • 打赏
  • 举报
回复
1.脚本的编码没有问题,浏览器的编码也没有问题。
尝试多中编码,依然无效

2. IIS 是英文的。 但是在控制面板里面有脚 系统字符集 设置的选项吗??
我只记得有区域与语言吧, 里面全部设置成china 了。

可是问题依然纯真,难道要装 语言包,才能解决这个问题?
hookee 2009-10-04
  • 打赏
  • 举报
回复
1 编码问题,按上述方法检查文件本身的编码对不对.
2 你用的是英文版的IIS, chr处理和中文版的不一样,试试看改动控制面板中系统字符集的设置.
sccroom 2009-10-04
  • 打赏
  • 举报
回复
大伙,忘记提供一个重要的信息了。我的操作系统是英文2003 不是不是这样的导致了无法输出中文字符呢?
很有可能.... 555...
sccroom 2009-10-04
  • 打赏
  • 举报
回复
能否指教一下,如何确定VBSCRIPT 的版本和你的是一样的。估计我的环境配置错误了。我需要提供什么信息?
sccroom 2009-10-04
  • 打赏
  • 举报
回复
但是问题是我的无法输出:结果是

Microsoft VBScript runtime error '800a0005'

Invalid procedure call or argument: 'chr'

/me/t.asp, line 10
hookee 2009-10-04
  • 打赏
  • 举报
回复
除了设置charset=gb2312,文件本身也应该是ANSI编码,windows记事本打开页面,菜单中选另存为,对话框中可以看到文件本身的编码格式.

代码应该是: 能够正常显示 提交

<%
'On Error Resume Next
response.write chr(-13087) & chr(-16965)
%>


三楼の郎 2009-10-04
  • 打赏
  • 举报
回复
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
<body>
<%
response.write(chr(-13087) & chr(-16965))
%>
</body>
</html>

输出的确实是"提交",和你说的正常情况相同。
sccroom 2009-10-04
  • 打赏
  • 举报
回复
1. 数据无所谓只要是中文,例如: ” 提交“ 对应的ASC码是(-13087,-16965)
2. 这个是我页面的编码标记: <meta http-equiv="Content-Type" content="text/html; charset=gb2312">

英文支持。
对了大家可以自RUN一下,看是否能运行下面的代码,及证明IIS里面支持CHR 中文不。
<%
'On Error Resume Next
response.write(chr(-13087)chr(-16965))
%>

正常的话应该输出: 提交

谢谢!!
hookee 2009-10-04
  • 打赏
  • 举报
回复
1. 你的测试数据贴一下
2. 编码的值和文件本身的编码有关
3. 原来是gb2312下编码的,比如百度的url编码,那么上述代码是可以转成中文的。
sccroom 2009-10-04
  • 打赏
  • 举报
回复
谢谢大家的反馈,但是上面的好像都不太对呢。经过努力的网上资料搜索,还有多次尝试,现在我这里有点进度:

其实我之前贴上的那段代码,和后来你们贴上的代码,思路是一样的,问题都会卡在CHR 那里。

所以我可以判定,不是代码的问题。问题看来是出在服务器上了。

我用VB 去试了试 法相有这样一个说法: DBCS字符 如果用了这个的话他的范围就是 -32768 – 32767
而不再仅限于 0-255了。

可以相信,0-255 应该只是用于英文的。 而 -32768--- 32767 才能支持中文。 这个是我以前没有掌握到的。

可是问题又来了。如何才能在IIS 里面设置 CHR 支持 -32768---32767 呢?

大虾希望继续顶, 感觉,问题要浮出水面了。

同事说一时。 对象server.urlencode 这一套,不支持中文。 而 request +Request.QueryString() 能够支持中文,但是我用的是内部调用,而不是页面调用。所以这个不考虑。不过十分感谢大家帮小弟。

感谢万分,继续顶。。。。
三楼の郎 2009-10-04
  • 打赏
  • 举报
回复
不知道你这个解码函数在什么情况下使用,一般情况下用UrlEncode编码的东西用Request.QueryString()取出来的时候就自动解码了,不需要你单独写个解码函数,比如:
<a href="a.asp?tt=<%=server.urlencode("测试")%>">

a.asp
<%
response.write(request("tt"))
%>
hookee 2009-10-04
  • 打赏
  • 举报
回复
以下,页面的asp文件本身的编码要是GB2312。


<%
url = "wd=%D6%D0%CE%C4%B2%E9%D1%AF"
Response.Write URLDecode(url)

Function URLDecode(u)
Dim s, a, i, c, t, d
s = ""
For i=1 To Len(u)
c = Mid(u, i, 1)
If c <> "%" Then
s = s & c
Else
t = Mid(u, i+1, 2)
d = Eval("&H" & t)
If d >=0 And d < 127 Then
s = s & Chr(d)
i = i + 2
Else
c = Mid(u, i+3, 1)
If c <> "%" Then
URLDecode = s & "无法转换"
Else
c = Mid(u, i+4, 2)
d = Eval("&H" & t & c)
s = s & Chr(d)
i = i + 5
End If
End If
End If
Next
URLDecode = s
End Function

%>
sccroom 2009-10-04
  • 打赏
  • 举报
回复
网络上有一些关于此类问题的CODE 但是基本上要转换成中文就会出现 CHR 益处的现象,估计是哪个控件不支持。希望大家持续关注一下这个问题。
sccroom 2009-10-04
  • 打赏
  • 举报
回复
怎么没有人回呢? 加点我自己的实验结果:

全部改成英文,就没有这样的问题了。看来时不支持中文的原因,但是如何解我还没有好的想法。

大虾们,帮顶呀!!

28,406

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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