打印

中文提交参数奇偶数问题

我再提交中文参数的时候用的是以下函数转换的UTF码(在本站找到的)

function unicode2gb(str,oldCharset,newCharset){
                     var stream=new ActiveXObject("ADODB.Stream")
                     stream.type=2
                     stream.Mode=0
                     stream.Open()
                     stream.Charset=newCharset
                     stream.WriteText(str)
                     stream.Position= 0
                     stream.Type= 2
                     stream.Charset=oldCharset
                     var s=stream.ReadText()
                     stream.Close()
                     return s;
              }
              
              var m=String(Request("m"));

              m=unicode2gb(m,"utf-8","gb2312")

问题是我在提交偶数个汉字的时候几乎都能成功,在提交奇数个汉字的时候失败,这是为什么呢?怎么解决?

非常着急啊。谢谢各位了。
这个问题以前就有人提到了,以前一直不知道原因,现在终于发现了,是因为用<a href="testgb.asp?name=$(name:e)">提交</a><br/> 这种方式写法本身的问题,即使不经过任何处理,后台接收到的数据本身已经是不完整的了,所以并非ado转换时丢失

如此看来,还是老老实实用anchor写吧
★ 卖坏梨的 The Baby Shop ★
http://shop34968454.taobao.com/
可怜吧,<a>只能链接不能传参数呀
myhyli在上个帖子中说
引用:
这个问题以前就有人提到了,以前一直不知道原因,现在终于发现了,是因为用<a href="testgb.asp?name=$(name:e)">提交</a><br/> 这种方式写法本身的问题,即使不经过任何处理,后台接收到的数据本身已经是不完整的了,所以并非ado转换时丢失

如此看来,还是老老实实用anchor写吧
老版。"anchor"也就是最后一句能不能给个例子,或者说以前的哪个页面上有相关资料。谢了,很着急。

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!

              <anchor>提交<go href="testgb.asp" method="post">
                            <postfield name="name" value="$(name:e)"/>
                     </go></anchor><br/>
★ 卖坏梨的 The Baby Shop ★
http://shop34968454.taobao.com/

TOP

<input name="mail" emptyok="false" tabindex="2" format="*x" value="abc"/>
<br/>
<anchor>提交<go href="xxx.asp" method="post">
<postfield name="mail" value="$(mail:e)"/>
</go></anchor><br/>

啊,太好了,您在阿。我也刚看到。呵呵

还有阿,就是这个样的话,中文参数传过去,还是用开头的函数转换成GB码是吗?
第二,如果我在提交的同时传送ASP参数可以吗?像下面这样。
<anchor>提交<go href="xxx.asp?canshu2=xxx" method="post">
<postfield name="mail" value="$(mail:e)"/>

TOP

不,这样传过去的话,中文已经被编码成了%e4%b8%ad%e6%96%87这样的形式,用js的话可以用decodeURI(str)来解,vbs就不知道了,大概要自己写脚本操作字节来转了吧

你写成
<go href="xxx.asp" method="post">
<postfield name="mail" value="$(mail:e)"/>
<postfield name="canshu2" value="xxx"/> 这样好了
★ 卖坏梨的 The Baby Shop ★
http://shop34968454.taobao.com/

TOP

也就是说,我的接受页面要用javascript是吗?
接收后使用decodeURI(request(参数))就能OK吗。
接收端能给段javascript的转换代码么?
谢谢

TOP

就是你写的那样
decodeURI(Request("password")) ,另外还需要再接着做个unescape()处理
★ 卖坏梨的 The Baby Shop ★
http://shop34968454.taobao.com/

TOP

我正在试验,看参考书上写的 unescape()是早版本的,新版本可以用decodeure替换啊。

老版你亲自试验过么?

给个完整的代码吧。

TOP

好了,测试通了。汉字显示正确。
多谢版主了!!!!

不用unescape()我这里就能行了,您是怎么用的unescape()和decodeure配合的?

TOP

unescape是为了对付?&+这些,例如提交的空格就会被转换成+号
★ 卖坏梨的 The Baby Shop ★
http://shop34968454.taobao.com/

TOP

原来如此,谢谢老版!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

TOP

请问这个funtion的ASP版本是怎样的?我找这个东西很久了,请帮忙!
引用:
函数转换的UTF码(在本站找到的)

function unicode2gb(str,oldCharset,newCharset){
                     var stream=new ActiveXObject("ADODB.Stream")
                     stream.type=2
                     stream.Mode=0
                     stream.Open()
                     stream.Charset=newCharset
                     stream.WriteText(str)
                     stream.Position= 0
                     stream.Type= 2
                     stream.Charset=oldCharset
                     var s=stream.ReadText()
                     stream.Close()
                     return s;
              }
              
              var m=String(Request("m"));

              m=unicode2gb(m,"utf-8","gb2312")

TOP

TOP

unescape()和decodeure()这两个函数调用的格式是怎样的呀?

TOP

这要写在JS页面中,直接调用就可以了。

TOP

按照你们说的,调用了decodeure(request("title"))函数,而且提交是按以下格式的:


<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<%Response.ContentType ="text/vnd.wap.wml;charset=utf-8"%>
<?xml version="1.0" encoding="gb2312"?>
...
<anchor title="<%=unicode("确定")%>"><%=unicode("确定")%>
<go href="addurl.asp" method="post">
       <postfield name="wapurl" value="$(wapurl)"/>
       <postfield name="title" value="$(title)"/>
</go>

但出来的结果是:输入"中国人",出来是"中国".头晕中.
少一个字原因是什么?如何解决?谢谢!

TOP