2011-03-14 49 views
1

我遇到了一个奇怪的问题与IE浏览器的URL,如果我在URL中传递场景它不起作用,它似乎完美适用于其他浏览器。如何使用Javascript中的重音字符编码URL?

IE中的URL出来作为:

.../search.aspx关键字= SC%C3%83%C2%a9nario

在火狐URL出来作为:

.../search.aspx?keyword = sc%C3%A9nario

在IE浏览器的URL中断和Firefox工作正常,我必须做URL解码来照顾这在IE中?

+0

如何在URL中传递它? – Gumbo 2011-03-14 15:40:53

回答

2

虽然你没有说你如何“通过”字符串,我可以告诉你发生了什么事。

字符é具有码点E9。在UTF-8中,它被编码为两个字节:C3 A9。所以,在URL中显示“方案”的正确途径是

sc%C3%A9nario 

现在,如果你把这个字符串,看着每一个单个字节,并假定他们是字符,并且做了一个UTF-8编码,会发生什么第二次?会发生什么是

  • 秒 - >取值
  • Ç - >ç
  • %C3将被解释为与代码点C3,即,它在UTF-8是C3 83
  • %A9将被解释为带有代码点A9的字符,即©,它在UTF-8中是C2 A9。
  • N - >ñ

这与您在IE中看到的完全对应。

现在我不能肯定地说这是怎么发生的,因为问题没有足够的背景,但是很清楚的是,字符串“scénario”被编码成UTF-8字节字符串,然后它再次编码为,这是基于第一种编码在Windows-1252或Latin-1编码中产生字符串的奇怪假设。

你需要看看你的字符串是如何“编码两次”。

相关问题