我有个页面,需要在url中传递中文参数
比如: a.aspx?x=中文这在ie6或者chrome都是ok的,但是在firefox里面,就会显示出a.aspx?x=%D6%D0%CE%C4这样的东西来,我试了试百度和google, 百度是等它继续乱码,但不影响使用,无论在地址栏直接输入中文或者在百度搜索条中输入中文,都显示乱码。google是在页面搜索条中输入中文,url会显示中文,如果在url中输入中文,则像上面说的一样显示乱码,但都不影响实际功能。但我的程序得到乱码后,就无法正常工作了。请问这里面需要做什么转换么?如果需要,请问如何转换%D6%D0%CE%C4这样的字符。如果有其他办法,也请不吝赐教。谢谢!
比如: a.aspx?x=中文这在ie6或者chrome都是ok的,但是在firefox里面,就会显示出a.aspx?x=%D6%D0%CE%C4这样的东西来,我试了试百度和google, 百度是等它继续乱码,但不影响使用,无论在地址栏直接输入中文或者在百度搜索条中输入中文,都显示乱码。google是在页面搜索条中输入中文,url会显示中文,如果在url中输入中文,则像上面说的一样显示乱码,但都不影响实际功能。但我的程序得到乱码后,就无法正常工作了。请问这里面需要做什么转换么?如果需要,请问如何转换%D6%D0%CE%C4这样的字符。如果有其他办法,也请不吝赐教。谢谢!
我用的是jquery的一个插件,得到的字符串就是%D6%D0%CE%C4, 但实际上我需要的是“中文”,而不是这个编码,所以我需要编码转换的办法另外就是,ie和chrome给的是中文,而ff给的是编码,我又如何去判断字符串到底是中文还是编码啊?
encodeURIComponent()和decodeURIComponent()
貌似这个可以解决编码的转换问题但请问,我如何知道一个字符串是否已编码,有这样的函数么?isEncodeURIComponent()?
我对“中文”做encode
出来的都不是%D6%D0%CE%C4
请问%D6%D0%CE%C4这串字符串,ff是用什么办法encode的啊???
百度和google都解决了这个问题,请问有什么办法么?
你这是什么应用?
一般是不允许用户在url里直接输入任何东西的!!!
会出漏洞的,一般黑客们才会拼接URL字符串,
直接在地址栏输入的,
再说了,一般用户都不懂的,他知道要什么参数啊?
那你也太牛了!!!
我都是使用它的搜索框的。
你是不是说地址栏,什么也没有的情况下直接输入汉字啊???
那也应该经过编码了。
在百度页面中输入“禽流感”,会跳转到这个地址:
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方法都不同所以我想知道,他们用的是什么函数,什么方法
这我知道了 你知道google用的什么方法么? 为什么他能够和ff做同样的编码?
var test = encodeURI("中文");
alert(test);
alert(decodeURI(test));
可参考一下: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 却不行了
这的确是问题关键所在,貌似ff会自发自觉的做gbk编码转换
请问用什么方法可以在javascript中做gbk转utf呢?
谢谢!
queryString = Request.QueryString然后,用正则在 queryString 匹配截取参数值,再自行对 %xx 格式的 进行识别解码---只是一个思路
<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 = 节约