高手请进,无数高手完全弄不懂的编码问题.神奇的乱码 编码乱码浏览器 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 也许是apache的配置问题吧,记得apache配置中有字符集的设置的 又来了?windows下任何浏览器下无任何问题。这话说的太武断!这是 XP 360极速浏览器的截图我不否认 IE 中为没有问题这是因为 IE 有强大的字符集识别功能,完全可以忽视 Content-Type: text/html; charset 的影响这就是网景倒闭的原因之一。而那些在网景倒闭时公布的浏览器代码(10余兆c程序)基础上建立起来的各种浏览器,由于微软专利的原因,是无法解决这个问题的当然这是题外话,不在讨论的序列中你还是要找到在哪里会有 charset=gbk 的不要过分相信工具软件,最好手工逐行查找。毕竟配置文件也就哪几个但也不排除你而外安装了什么插件,造成了这种情况 此问题在我本机上完美重现只要是login.html保存为utf-8编码无BOM,必定乱码。保存时保留BOM,侧无乱码。用UltraEdit反复测试多次,均如此。 关键是你以前的项目有没有这种情况! 如果没有那就是代码问题,如果也有,那可能是服务端问题、操作系统问题或者压根就是你代码输入的有错误(原先sql语句里错了一个字母,折腾一天,因为觉得自己不能犯小错误,实际上还是犯了!)没什么实质性的东西,我的一点建议,主要是看看到底是代码原因,还是运行环境的原因! 怎么保留BOM 谢谢 检查一下nginx.conf配置文件?有没有gbk?xu大,我感觉楼主指的是windows上的服务器,既然换服务器没事,估计就是nginx哪里的配置或者模块干扰了吧? 怎么保留BOM 谢谢用UltraEdit另存为,格式选 'UTF-8' 是保留,选 'UTF-8 -无BOM' 是不保留。 不要干扰人家的判断$url = 'http://parttime.wengege.com/h/login.html';$s = file_get_contents($url, false, null, 0, 10);//echo bin2hex($s); //3c21444f435459504520$url = 'http://parttime.wengege.com/h/test.html';$s = file_get_contents($url, false, null, 0, 10);echo bin2hex($s); //efbbbf3c21444f435459显然 3c21444f435459504520 是没有 BOM 头的efbbbf3c21444f435459 是有 BOM 头的BOM 头对于浏览器而言,至多会影响到显示样式,而不会造成乱码 $url = 'http://parttime.wengege.com/Public/js/search.js';$s = file_get_contents($url, false, null, 0, 10);echo bin2hex($s); //2f2fe6a0b9e68daee7b1/Public/js/search.js无BOM头 BOM 头对于浏览器而言,至多会影响到显示样式,而不会造成乱码这可说不说,服务器返回是gbk,utf8这样的编码,如果没有BOM头来说明,是按gbk显示还是按utf8显示?明显这里是按gbk来显示的。 谢谢你版主。我的意思是代码在windows下运访问不会有任何问题。你看到的是在linux下运行的,就是有问题。 <?phpob_start();header("Content-Type: text/html; charset=gbk,utf8");echo "测试文本";ob_flush();?>保存为无BOM和有BOM,就会乱码和正常 xu大,我感觉楼主指的是windows上的服务器,既然换服务器没事,估计就是nginx哪里的配置或者模块干扰了吧?是的,这位兄弟正解,版主大人,熬夜太多,水平是极高的,但精神恍惚,最近回复 我问题时,理解的和我说的恰好相反。我讲了很多次是响应,xu大说是请求,还给我列了很例子。.... 我指的windows服务器。他说是windows下访问。我说gbk是自动生成的。他说gbk是我手工设置的。..... 正好和我相反。 同样的ngnix配置下,其它项目都没有问题,差不多代码。 经测试,保存为utf-8 +bom 可以解决此问题。但原因何在呢?有人能够解释么? header("Content-Type: text/html; charset=gbk,utf8");是发出回应的头get_headers(url) 得到的 Content-Type: text/html; charset=gbk,utf8是服务器的响应我什么时候说过请求啦?相应的头不是你设置的吗?放在配置文件里自动发出,也是你设置的我一点都没搞混,而是你自己忙晕了!你换了服务器就正常了,这恰恰表示了出问题的服务器的配置有问题! 以前的相同的代码,还有其它一些html代码,都是没有bom头的,也没有乱码。 其实谁也没有找到原因,只是观察到一些现象 Content-Type: text/html; charset=gbk,utf8这个 gbk 才是真正的原因,只不过你不肯需找他的来源罢了 为什么发出gbk,不在服务器上翻,估计谁也没法说出具体原因。 xuzuning版主正解!问题原因找到,是nginx此网站配置时使用了charset gbk,utf-8 这样设置了。去掉gbk就ok了。所以乱码解决。是我在thinkphp网站有一个网友和我碰到同样问题。提醒我上服务器上查看配置文件解决的。 如果是ngix charset 設置問題,為甚麼換個folder放就可以呢? 換個folder應該也是用同一個charset的。所以之前才想是不是有.htaccess影響當前folder。就是因為這點,讓我沒有覺得是default charset設置問題。 你说你的文件确实保存的是UTF8,好像每个页面的mate标签是可以设置浏览的编码的,会不会是设置了GBK或者是后台代码输出的字符是GBK?你用的是cms么?是不是从gbk转成utf8的其实我对php不熟悉,也只是猜测 猜测哈 有人做过facebook application的开发吗? 双搜索框数据库搜索? 求助数组问题 php编写执行linux shell命令的代码 php 纯讨论:关于可变函数名机制 有什么好处 php select級聯問題 哎呀~~麻烦又有问题了~~ 如何在帖子里面插入图片啊 有将mysql数据表自动转成建表PHP源代码建表的工具吗? 如何解决$问题??? 请问,用Javamail发送的邮件能不能删除掉? 怎么给php加密??
windows下任何浏览器下无任何问题。这话说的太武断!
这是 XP 360极速浏览器的截图
我不否认 IE 中为没有问题
这是因为 IE 有强大的字符集识别功能,完全可以忽视 Content-Type: text/html; charset 的影响
这就是网景倒闭的原因之一。
而那些在网景倒闭时公布的浏览器代码(10余兆c程序)基础上建立起来的各种浏览器,由于微软专利的原因,是无法解决这个问题的
当然这是题外话,不在讨论的序列中你还是要找到在哪里会有 charset=gbk 的
不要过分相信工具软件,最好手工逐行查找。毕竟配置文件也就哪几个但也不排除你而外安装了什么插件,造成了这种情况
只要是login.html保存为utf-8编码无BOM,必定乱码。保存时保留BOM,侧无乱码。用UltraEdit反复测试多次,均如此。
怎么保留BOM 谢谢
xu大,我感觉楼主指的是windows上的服务器,既然换服务器没事,估计就是nginx哪里的配置或者模块干扰了吧?
怎么保留BOM 谢谢
用UltraEdit另存为,格式选 'UTF-8' 是保留,选 'UTF-8 -无BOM' 是不保留。
$url = 'http://parttime.wengege.com/h/login.html';
$s = file_get_contents($url, false, null, 0, 10);
//echo bin2hex($s); //3c21444f435459504520$url = 'http://parttime.wengege.com/h/test.html';
$s = file_get_contents($url, false, null, 0, 10);
echo bin2hex($s); //efbbbf3c21444f435459显然
3c21444f435459504520 是没有 BOM 头的
efbbbf3c21444f435459 是有 BOM 头的BOM 头对于浏览器而言,至多会影响到显示样式,而不会造成乱码
$s = file_get_contents($url, false, null, 0, 10);
echo bin2hex($s); //2f2fe6a0b9e68daee7b1/Public/js/search.js无BOM头
谢谢你版主。
我的意思是代码在windows下运访问不会有任何问题。
你看到的是在linux下运行的,就是有问题。
ob_start();
header("Content-Type: text/html; charset=gbk,utf8");
echo "测试文本";
ob_flush();
?>
保存为无BOM和有BOM,就会乱码和正常
xu大,我感觉楼主指的是windows上的服务器,既然换服务器没事,估计就是nginx哪里的配置或者模块干扰了吧?
是的,这位兄弟正解,版主大人,熬夜太多,水平是极高的,但精神恍惚,最近回复 我问题时,理解的和我说的恰好相反。
我讲了很多次是响应,xu大说是请求,还给我列了很例子。.... 我指的windows服务器。他说是windows下访问。我说gbk是自动生成的。他说gbk是我手工设置的。..... 正好和我相反。
同样的ngnix配置下,其它项目都没有问题,差不多代码。
是发出回应的头get_headers(url)
得到的 Content-Type: text/html; charset=gbk,utf8
是服务器的响应我什么时候说过请求啦?
相应的头不是你设置的吗?放在配置文件里自动发出,也是你设置的我一点都没搞混,而是你自己忙晕了!
你换了服务器就正常了,这恰恰表示了出问题的服务器的配置有问题!
Content-Type: text/html; charset=gbk,utf8
这个 gbk 才是真正的原因,只不过你不肯需找他的来源罢了
问题原因找到,是nginx此网站配置时使用了charset gbk,utf-8 这样设置了。去掉gbk就ok了。所以乱码解决。
是我在thinkphp网站有一个网友和我碰到同样问题。提醒我上服务器上查看配置文件解决的。
或者是后台代码输出的字符是GBK?你用的是cms么?是不是从gbk转成utf8的其实我对php不熟悉,也只是猜测 猜测哈