我正在处理站点转移,在此过程中我的字符集被弄乱了。起初,我将所有文件原封不动地传输,新服务器上的文件显示<?>
特殊字符的图标。浏览器的字符编码(Chrome 和 FF)一目了然,告诉我它正在自动检测 UTF-8。页面的元字符集设置为 ISO-8859-1。副本是从多个数据库中的各种表中提取的(不要问)。
在原始站点上,所有内容都按应有的方式显示。在新站点上,<?>
...我深入研究了它,在 php.ini 中找到了默认字符集 =“UTF-8”,将其设置为空。现在网站大部分页面显示正常,浏览器识别元字符集标签,大家开心;也就是说,直到我导航到根目录下的文件夹。
这个文件夹中的文件,虽然它们的元字符集是 ISO-8859-1,但不知何故告诉浏览器被读取为 UTF-8,这意味着我<?>
在这些页面上看到了。如果我将浏览器设置为 ISO-8859-1,则显示正常。自动检测将其重置为 UTF-8。有任何想法吗?
谢谢!
更新(从下面的评论中添加):
我按照 martinstoeckli 的建议通过W3C 检查器运行该页面,它告诉我 HTTP Content-Type 是Content-Type: text/html; charset=utf-8
而元标记是<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
,这给了我一个冲突字符编码声明错误。疯狂的是,我一生都无法弄清楚 UTF-8 声明的来源!它不在任何文件中,所有文件都保存为 UTF-8 不带 BOM,php.ini 设置为声明无默认值,文件夹的 .htaccess 设置为 PatomaS 建议的那样。
(值得一提的是,Mozilla 的 Web Sniffer 确认 HTTP 标头 Content-Type 为text/html; charset=utf-8
.)
更新: 虽然我们没有像我提出的那样解决这个问题,但我确实决定解决我的字符编码问题的最佳方法是重构所有内容以使用 UTF-8 编码。当然,这可能意味着您会在这里看到我提出更多令人兴奋的新手问题,例如“为什么 utf8-encode() 不做我的 łâùñdrÿ?”
当然,这意味着谜团仍然存在:当一切似乎都配置不同时,是什么导致服务器发送 UTF-8 的 HTTP 内容类型字符集标头?