php – 当浏览器将’ISO-8859-1’作为元字符集时,浏览器将页面检测为UTF-8
作者:互联网
我正在处理网站转移,在这个过程中我的字符集被搞砸了.起初,我转移了所有文件而没有任何改动,新服务器上的文件显示<?>特殊字符的图标.浏览一下浏览器的字符编码(Chrome和FF)就告诉我它是自动检测UTF-8.页面的元字符集设置为ISO-8859-1.复制是从多个数据库中的各个表中提取的(不要问).
在原始网站上,所有显示应该.在新网站上,<?> …我挖到它,在php.ini中找到默认的charset =“UTF-8”,将其设置为空.现在网站上的大部分页面显示都很好,浏览器识别出meta charset标签,每个人都很开心;也就是说,直到我导航到root下的文件夹.
这个文件夹中的文件,虽然它们的元字符集是ISO-8859-1,但它以某种方式告诉浏览器被读作UTF-8,这意味着我看到<?>在这些页面上.如果我将浏览器设置为ISO-8859-1,那么它显示正常.自动检测将其重置为UTF-8.有任何想法吗?
谢谢!
更新(从下面的评论中添加):
我按照martinstoeckli的建议在W3C checker上运行了页面,它告诉我HTTP内容类型是Content-Type:text / html; charset = utf-8而meta标签是< meta http-equiv =“Content-Type”content =“text / html; charset = ISO-8859-1”/> ;,这给了我一个冲突的字符编码声明错误.疯狂的是,我不能为我的生活弄清楚UTF-8声明的来源!它在任何文件中都没有,所有文件都保存了UTF-8 w / out BOM,php.ini设置为声明没有默认值,文件夹的.htaccess设置为像PatomaS建议的那样.
(对于它的价值,Mozilla的Web Sniffer确认HTTP标题Content-Type of text / html; charset = utf-8.)
更新:
虽然我没有像我提出的那样找到解决这个问题的方法,但我确定解决我的字符编码问题的最佳方法是重构所有内容以使用UTF-8编码.当然,这可能意味着你会在这里看到我更多令人兴奋的新手问题,例如“为什么不会utf8-encode()做我的łâùñdr?”
当然,这意味着神秘感仍然存在:当看起来所有内容配置不同时,是什么导致服务器发送UTF-8的HTTP Content-type字符集标题?
解决方法:
文件中是否包含BOM(字节顺序标记).要确保使用记事本打开文件并选中“编码”菜单,您还可以选择转换为ansi作为测试选项.
BTW使用utf-8到处都是一个更好的长期方法,我可以建议.
标签:php,utf-8,character-encoding,iso-8859-1 来源: https://codeday.me/bug/20190715/1469193.html