当前位置: 代码迷 >> PHP >> ,无数高手完全弄不懂的编码有关问题.神奇的乱码
  详细解决方案

,无数高手完全弄不懂的编码有关问题.神奇的乱码

热度:99   发布时间:2016-04-28 19:04:42.0
高手请进,无数高手完全弄不懂的编码问题.神奇的乱码
也就是此贴,http://bbs.csdn.net/topics/390807783?page=1#post-397542169

此贴有详细描述。解决此问题人可以得240分。这么个小问题,困扰二三天了,我已经从http底层看了数据包,依然无法解决。
-------------------------------------------------------------------------------------------
无数高手搞不定的(乱码)编码问题:只有在代码放入linux下用chrome访问时才乱码。其它任何情况正常。
windows下任何浏览器下无任何问题。
linux下。只有chrome访问出现乱码。(手工修改chrome编码当然可以正常显示了。)
-----------------------------------
http://parttime.wengege.com/h/login.html

响应编码居然为:gbk,utf-8.

HTTP/1.1 200 OK
Server: nginx/1.4.1
Date: Mon, 09 Jun 2014 15:28:28 GMT
Content-Type: text/html; charset=gbk,utf-8
Content-Length: 1843
Last-Modified: Mon, 09 Jun 2014 15:28:16 GMT
Connection: keep-alive
ETag: "5395d290-733"
Accept-Ranges: bytes

此/login.html内容用editplus打开看为utf-8.也已经另存为好几次为utf-8了。

是哪里让浏览器判断是gbk了呢?从而乱码?

-------------------------
引用 2 楼 changjay 的回复:
换一个编辑器试试,比如记事本或者emeditor之类的
我换了几个编辑器保存了。w3c检查里面有GBK字符。所以将utf-8识别为gbk了。真是奇怪了。无数次另存为转化过。

http://parttime.wengege.com/h/test.html
上面连接也是,在chrome下有乱码(JS引入时有乱码,奇怪的是其它部分乱码好了)。在ie下完全正常。
----------------------------------------------------
现在问题是:所有文件都检查过了(css,php,js),确定为utf-8编码。
有几个问题搞不定:
一、普通的html为utf-8编码。http响应居然为gbk,utf-8.所以出现乱码。问题是gbk哪来的?这三个字符哪来的?
我已经全站搜索GBK这三个字符。无获!!!
二、就算html偶尔成功后,但引入js还是乱码。指定引入编码为utf-8.

三、通过w3c烂网站检查,“成功识别”编码依然为 “gbk”. 然后w3c网站无数次崩溃。

真是神奇,检查结果说某行有问题。所有字符我从新打过,还是如此。换个目录的文件thinkphp3.1的登录还是正常。而thinkphp3.2下运行此html就是不正常。关键是这html和thinkphp毛关系都扯不上啊?
------解决方案--------------------
此问题在我本机上完美重现
只要是login.html保存为utf-8编码无BOM,必定乱码。保存时保留BOM,侧无乱码。用UltraEdit反复测试多次,均如此。
------解决方案--------------------
关键是你以前的项目有没有这种情况!  如果没有那就是代码问题,如果也有,那可能是服务端问题、操作系统问题或者压根就是你代码输入的有错误(原先sql语句里错了一个字母,折腾一天,因为觉得自己不能犯小错误,实际上还是犯了!)

没什么实质性的东西,我的一点建议,主要是看看到底是代码原因,还是运行环境的原因!
------解决方案--------------------
检查一下nginx.conf配置文件?有没有gbk?

引用:
又来了?
windows下任何浏览器下无任何问题。这话说的太武断!
这是 XP 360极速浏览器的截图


xu大,我感觉楼主指的是windows上的服务器,既然换服务器没事,估计就是nginx哪里的配置或者模块干扰了吧?
------解决方案--------------------
<?php
ob_start();
header("Content-Type: text/html; charset=gbk,utf8");
echo "测试文本";
ob_flush();
?>
保存为无BOM和有BOM,就会乱码和正常
------解决方案--------------------
header("Content-Type: text/html; charset=gbk,utf8");
是发出回应的头

get_headers(url) 
得到的 Content-Type: text/html; charset=gbk,utf8
是服务器的响应

我什么时候说过请求啦?
相应的头不是你设置的吗?放在配置文件里自动发出,也是你设置的

我一点都没搞混,而是你自己忙晕了!
你换了服务器就正常了,这恰恰表示了出问题的服务器的配置有问题!


------解决方案--------------------
其实谁也没有找到原因,只是观察到一些现象
 Content-Type: text/html; charset=gbk,utf8
这个 gbk 才是真正的原因,只不过你不肯需找他的来源罢了
  相关解决方案