2012-03-01 126 views
1

我有以下问题: 我有一个窗体,通过GET特殊字符接收。它读取它们,然后用这些字符填充字段。 我的<meta http-equiv="content-type" content="text/html;charset=utf-8" />插在<head>的正下方。 所有的东西在FF中都很完美,但是在IE中这些字符已经搞乱了,而我却得到了所有这些符号。 然而,在IE浏览器中,如果我右键单击页面,并在编码下将UTF-8更改为西欧(Windows),则这些字符将正确显示。 我也尝试在我的Apache conf文件中添加AddDefaultCharset Off,以确保Web服务器不覆盖字符集编码。 奇怪的是,如果在我的代码中,我使用PHP的htmlentities,那么文本在IE中正确显示,但在FF中错误。UTF 8编码工作在FF但在IE中不工作

除此之外,我用firebug和开发者工具来看看GET数据是如何传递的,看起来在FF中特殊字符被转换为:B6%C3%A4%C3%BC%C3%9F%C3%96%C3%84%C3%9C%20IT%20%C3%A0%C3%A8%C3%AC%C3%B2%C3%B9%20,但在IT中GET数据显示为àéèâêîôûœïç

任何人都可以帮助我吗?它开始变得非常令人沮丧,不能在FF和IE中找到方法。

回答

0

你说你有GET的URL像

emeasmartportal.com/sbso/index-test.php?fname=àéèâêîôûœïç 

它看起来像ythe问题是输入GET数据本身的麻烦:因为他们必须编码它才可以知道什么字符集响应页面具有,浏览器对该数据使用不同的默认编码。 Firefox似乎默认使用UTF-8(请参阅例如此错误报告)。 IE似乎没有那样做。

我认为你需要做的是使用mb_detect_encoding()来检测传入的数据是IS-8859-1还是UTF-8。 (这种特殊情况下,可以使用该功能来可靠地检测。)

如果传入的数据是ISO-8859-1(你可以使用mb_detect_encoding检测可靠),你需要将其转换:

iconv("iso-8859-1", "utf-8", $data) 

如果它已经是UTF-8,你不知道。

应该工作,但没有保证。当您不确定传入的编码时,编码问题可能会变得很糟糕。

+0

也许我只是愚蠢的,但例如,在萤火虫我不怎么或在哪里可以看到我的服务器发送的字符集头。我看到的是:Content-Type \t text/html,Transfer-Encoding \t chunked,Accept-Encoding gzip,deflate,Accept-Language \t zh-cn,en; q = 0.5。我在Windows Server 2008上使用Apache 2.2。 – 2012-03-01 10:46:22

+0

@Mihai奇怪,看起来没问题。你可以显示一个实时链接吗? – 2012-03-01 10:49:26

+0

http://emeasmartportal.com/sbso/index-test.php?fname=FRàéèêêôôôôôôôéDEöäßßeÜITàèìòùESñáéíóú&lname = FRàéèâôôôôôôôéDEöäüßÖÄÜITàèìòùESñáéíóú&cid = 1-1Q9-2406&coid = 1-10EXOC&partname = FRàéèâêêîôûœœçDE如果你打开这个链接,fname参数将在FF中正确显示,但是在IE中是错误的(我没有对它进行任何编码/解码)。 lname会在IE中正确显示,但在FF中错误(我正在做GET数据的性能) – 2012-03-01 11:08:35

相关问题