我有以下问题:
我有一个通过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也工作。
答案 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,你就不会。
此应有效,但无法保证。当您不确定传入的编码时,编码问题可能会很糟糕。