我有个页面,需要在url中传递中文参数
比如: a.aspx?x=中文这在ie6或者chrome都是ok的,但是在firefox里面,就会显示出a.aspx?x=%D6%D0%CE%C4这样的东西来,我试了试百度和google, 百度是等它继续乱码,但不影响使用,无论在地址栏直接输入中文或者在百度搜索条中输入中文,都显示乱码。google是在页面搜索条中输入中文,url会显示中文,如果在url中输入中文,则像上面说的一样显示乱码,但都不影响实际功能。但我的程序得到乱码后,就无法正常工作了。请问这里面需要做什么转换么?如果需要,请问如何转换%D6%D0%CE%C4这样的字符。如果有其他办法,也请不吝赐教。谢谢!

解决方案 »

  1.   

    .aspx?x=%D6%D0%CE%C4这不是乱码,这是URL编码,很正常的,我的IE也是这些啊
      

  2.   

    那怎么处理这个编码啊?
    我用的是jquery的一个插件,得到的字符串就是%D6%D0%CE%C4, 但实际上我需要的是“中文”,而不是这个编码,所以我需要编码转换的办法另外就是,ie和chrome给的是中文,而ff给的是编码,我又如何去判断字符串到底是中文还是编码啊?
      

  3.   

    查到一组javascript函数
    encodeURIComponent()和decodeURIComponent()
    貌似这个可以解决编码的转换问题但请问,我如何知道一个字符串是否已编码,有这样的函数么?isEncodeURIComponent()?
      

  4.   

    还是有问题的说
    我对“中文”做encode
    出来的都不是%D6%D0%CE%C4
    请问%D6%D0%CE%C4这串字符串,ff是用什么办法encode的啊???
      

  5.   

    在传送之前使用encodeURIComponent()编码收到时使用decodeURIComponent() 解码即可
      

  6.   

    问题是,如果用户在url里直接输入汉字的话,ff会自己先编码一次,而这个编码和 encode编码出来的不一样 
    百度和google都解决了这个问题,请问有什么办法么?
      

  7.   

    用户在url里直接输入汉字的话?
    你这是什么应用?
    一般是不允许用户在url里直接输入任何东西的!!!
    会出漏洞的,一般黑客们才会拼接URL字符串,
    直接在地址栏输入的,
    再说了,一般用户都不懂的,他知道要什么参数啊?
      

  8.   

    我是想了解这种技术  因为baidu和google都做到了这点, 所以想知道这种做法的具体操作,比如用到了什么函数之类的你说的先encode,再到目标页面decode,这个方法本身没问题,只不过没那么完美么:) 完美的方法不一定要去实现它, 但是了解清楚它也是做程序员的一种责任嘛
      

  9.   

    baidu和google你使用的时候难道是直接拼字符串???
    那你也太牛了!!!
    我都是使用它的搜索框的。
    你是不是说地址栏,什么也没有的情况下直接输入汉字啊???
    那也应该经过编码了。
      

  10.   

    举个实例吧,比如我要在百度和google查“禽流感”
    在百度页面中输入“禽流感”,会跳转到这个地址:
    http://www.baidu.com/s?wd=%C7%DD%C1%F7%B8%D0
    当我把wd后面的文字更改后,就变成
    http://www.baidu.com/baidu?word=禽流感这个测试在ie下运行正常;ff下,就算输入中文在地址栏,最后ff自己会把它更改成编码状态,而且证明ff的编码和百度自己的编码是一样的;在chrome下,如果输入中文,就会页面上的关键字就不是中文本身,而是另几个乱码字,估计百度没有确认chrome的编码。同理,在google下作测试:
    如果我在页面输入“禽流感”,页面会跳转到以下地址:
    http://www.google.cn/search?hl=zh-CN&source=hp&q=禽流感&btnG=Google+搜索&aq=f&oq=
    这时很明显,google没有做encode,所以我在地址栏输入同样的文字是一样的。
    在ie和chrome下,地址栏和页面都是同样的中文,而在firefox下,地址栏永远显示编码(因为ff自己会将中文编码),对“禽流感”的搜索uri是:http://www.google.cn/search?hl=zh-CN&source=hp&q=%C7%DD%C1%F7%B8%D0&btnG=Google+%CB%D1%CB%F7&aq=f&oq=;
    而页面显示依然正常。所以现在感觉,google使用的方法是传输时不encode,到了目标页面才做判断,如果是已编码的,如ff,就将其decode成中文,如果没有编码的,就直接用(这里可能是都decode,因为js的decodeURI方法,不管字符串是code还是中文,都会解码成中文)。所以我想知道google用的是什么方法来decode的,因为escape,encodeURI,encodeURIConponent三个方法编码出来的都和firefox编码出来的不一样。再对比google和百度的编码,因为我用的是一个关键字,而编码是相同的,所以他们的encode和decode是用的相同的办法而这个办法和ff浏览器用的也是相同的 这和js的三个encode方法都不同所以我想知道,他们用的是什么函数,什么方法
      

  11.   


    这我知道了  你知道google用的什么方法么? 为什么他能够和ff做同样的编码?
      

  12.   


    var test = encodeURI("中文");
    alert(test);
    alert(decodeURI(test));
      

  13.   

    google 做了编码识别但是编码识别,是不保证正确的,只能是大多数情况下正确
    可参考一下:http://www.ialvin.cn/blog/article.asp?id=156 (识别 UTF-8)
    -------------------------------------------------http://www.baidu.com/s?wd=%D5%AC%C5%AE
    http://www.google.cn/search?q=%D5%AC%C5%AE上面两个地址:搜索参数都是 "%D5%AC%C5%AE", 但 Google 却不行了
      

  14.   


    这的确是问题关键所在,貌似ff会自发自觉的做gbk编码转换
    请问用什么方法可以在javascript中做gbk转utf呢? 
    谢谢!
      

  15.   

    浏览器发送请求时,不管有没有把一个 byte 的数据编成 %xx 的形式,这都不是导致乱码的问题问题是出在如果没有预先按某个字符集编成字节,再把各字节转成 %xx 形式的话, 浏览器在发出请求时,一个汉字,是按 GBK 发送 2byte 的数据, 还是按UTF-8发送 3byte 的数据呢各个浏览器间,不统一服务器在接收字节数据后,如果解码使用的字符集与客户端发送的不一致,就导致乱码
      

  16.   

    你如果真的没有办法避免 参数值中出现未 urlencoded 的字符.试一下:Dim queryString
    queryString = Request.QueryString然后,用正则在 queryString 匹配截取参数值,再自行对 %xx 格式的 进行识别解码---只是一个思路
      

  17.   

    查了下貌似没有比较好的javascript对gbk做编码解码的function看到有个办法是使用gbk和utf之间的对照表,然后来进行转换,这就需要一个txt文件和一大串代码了google是在服务器端进行的编码么?
      

  18.   


    <object id="regex" progid="VBScript.RegExp" runat="Server"></object>
    <%Function ReDecode(ByVal s)
    Dim reg, cs : cs = "GBK"
    regex.Pattern = "^(?:[\x00-\x7f]|[\xfc-\xff][\x80-\xbf]{5}|[\xf8-\xfb][\x80-\xbf]{4}|[\xf0-\xf7][\x80-\xbf]{3}|[\xe0-\xef][\x80-\xbf]{2}|[\xc0-\xdf][\x80-\xbf])+$"  
    If regex.Test(s) Then cs = "UTF-8"   
    With CreateObject("ADODB.Stream")   
    .Type = 2  
    .Open   
    .CharSet = "iso-8859-1"  
    .WriteText s   
    .Position = 0   
    .CharSet = cs   
    ReDecode = .ReadText(-1)   
    .Close   
    End With  
    Set sm = Nothing  
    End Functionfunction QueryString(name)
    Dim oCode : oCode = Response.CodePage
    Response.CodePage = 28591
    Dim value : value = Request.QueryString(name)
    QueryString = ReDecode(value)
    Response.CodePage = oCode
    End Function
    Response.Write Server.HTMLEncode(QueryString("p"))
    Response.Write Server.HTMLEncode(QueryString("p2"))
    Response.Write Server.HTMLEncode(QueryString("p3"))%>测试地址:
    http://localhost/test.asp?p=%BD%DA%D4%BC&p2=%E8%8A%82%E7%BA%A6&p3=节约p  = %BD%DA%D4%BC
    p2 = %E8%8A%82%E7%BA%A6
    p3 = 节约