Php UTF 8编码在FF中工作,但在IE中不工作

Php UTF 8编码在FF中工作,但在IE中不工作,php,utf-8,special-characters,Php,Utf 8,Special Characters,我有以下问题: 我有一个表单,通过获取特殊字符来接收。它读取它们,然后用这些字符填充字段。 我把插入了的正下方。 在FF中,一切都很完美,但在IE中,角色被搞乱了,我得到了所有这些� 相反,我是在打手势。 但是,在IE中,如果我右键单击页面并在“编码”下将UTF-8更改为西欧(Windows),这些字符将正确显示。 我还尝试在apacheconf文件中添加AddDefaultCharset Off,以确保web服务器不会覆盖字符集编码。 奇怪的是,如果在我的代码中使用PHP的htmlentiti

我有以下问题: 我有一个表单,通过获取特殊字符来接收。它读取它们,然后用这些字符填充字段。 我把
插入了
的正下方。 在FF中,一切都很完美,但在IE中,角色被搞乱了,我得到了所有这些� 相反,我是在打手势。 但是,在IE中,如果我右键单击页面并在“编码”下将UTF-8更改为西欧(Windows),这些字符将正确显示。 我还尝试在apacheconf文件中添加
AddDefaultCharset Off
,以确保web服务器不会覆盖字符集编码。 奇怪的是,如果在我的代码中使用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
,但其中GET数据显示为


有人能帮我吗?在FF和IE中找不到一种工作方式真的令人沮丧。

你说你在获取URL方面有困难,比如

 emeasmartportal.com/sbso/index-test.php?fname=àéèâêîôûœïç
看起来问题在于传入的GET数据本身:因为浏览器必须先对其进行编码,然后才能知道响应页面的字符集,所以浏览器对该数据使用不同的默认编码。Firefox在默认情况下似乎使用UTF-8(例如,请参阅此错误报告)。我好像没那么做

我认为您需要做的是使用
mb\u detect\u encoding()
来检测传入数据是is-8859-1还是UTF-8。(使用该功能可以可靠地检测此特定情况。)

如果传入数据是ISO-8859-1(您可以使用mb_detect_编码可靠地检测到),则需要将其转换为:

iconv("iso-8859-1", "utf-8", $data) 
如果已经是UTF-8,你就不需要了


这应该行得通,但不能保证。当您不确定传入的编码时,编码问题可能会很严重。

也许我很愚蠢,但例如,在firebug中,我不知道如何或在何处查看服务器发送的字符集标题。我看到的是:内容类型text/html,传输编码chunked,接受编码gzip,deflate,接受语言en-us,en;q=0.5。我正在windows server 2008上使用Apache 2.2。在本月初,该地区的一名男子在该地区的一名名名为为是是该地区的一名名名名为是该地区的第二名名名为是该地区的第三名名名名名名名名名名为是该地区的第三名名名名名为是该地区的第三名名名名名名为是该地区的第三名名名名名名名名名名为是该地区的第三名名名名名名名名名名名名名名名名名名名名为是该名名名名名名名名名名名名为该名名名名名名名名名为为为该地区的第三名名名名名名名名名名名名名名名名名名为该名名名为该名名名名名名名名为该名名名名名名名名名为为本本本本本本本本本本月月月在该名名名名名名名名名名名名名名名名名为为lang=DE如果要打开此链接,fname参数将在FF中正确显示但是IE是错误的(我没有对它进行任何编码/解码)。lname将在IE中正确显示,但在FF中错误(我正在对获取数据进行htmlentities),我很想这样做,但我不确定如何做到这一点。我尝试在conf文件和.htaccess文件中添加AddDefaultCharset指令,但我不确定这是否正确。你也会这样吗?@Mihai澄清-角色的具体位置在哪里?比如说,如果我选择西班牙语作为一种语言,我是否应该得到破碎的字符?因为它似乎在IE9中对我有效,所以被破坏的字符是通过GET发送的。因此,如果你用所有这些字符复制整个链接,它们应该在IE或FF中中断。表单的所有其他标签工作正常。