UTF 8编码在FF中工作但在IE中不起作用

时间:2012-03-01 10:31:24

标签: php utf-8 special-characters

我有以下问题: 我有一个通过GET特殊字符接收的表单。它读取它们然后用这些字符填充字段。 我在<meta http-equiv="content-type" content="text/html;charset=utf-8" />下面插入了<head>。 一切都在FF完美,但在IE中,角色搞砸了,我得到了所有这些 标志。 但是,在IE中如果我右键单击页面并在编码下我将UTF-8更改为西欧(Windows),这些字符将正确显示。 我还试图在我的Apache conf文件中添加AddDefaultCharset Off,以确保Web服务器不会覆盖charset编码。 奇怪的是,如果在我的代码中我使用PHP的htmlentities,那么文本在IE中正确显示但在FF中显示错误。

除此之外,我还使用了firebug和ie开发工具来查看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也工作。

1 个答案:

答案 0 :(得分:0)

您说您在使用GET网址时遇到了问题,例如

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

看起来问题是传入的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,你就不会。

有效,但无法保证。当您不确定传入的编码时,编码问题可能会很糟糕。