搜索
首页后端开发php教程编码问题:明明是utf-8,为何显示响应为gbk呢?

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了呢?从而乱码?


回复讨论(解决方案)

Content-Type: text/html; charset=gbk,utf-8 ???
有这样做字符集声明的吗?
浏览器如何知道哪些是 gbk 的,哪些是 utf-8 的?

换一个编辑器试试,比如记事本或者emeditor之类的

Content-Type: text/html; charset=gbk,utf-8 ???
有这样做字符集声明的吗?
浏览器如何知道哪些是 gbk 的,哪些是 utf-8 的?



这也正是我要问的问题。
上面的不是声明,是http响应。

换一个编辑器试试,比如记事本或者emeditor之类的


我换了几个编辑器保存了。里面有GBK字符。所以将utf-8识别为gbk了。真是奇怪了。
本人研究编码整整10年了。从来还没有编码搞不定的问题。
上面问题只在linux上出现,windows下无法重现。

而且,我换到其它test目录。则内容完好显示。

http 头中的内容除了状态码都是声明啊
如果你
header('Content-type: text/html;charset=gbk,utf-8');
HTTP 投中就会有 Content-Type: text/html;charset=gbk,utf-8

php.ini 的 default_charset
httpd.conf 的 default_charset
等,都是可以设置的

估计是服务器默认配置了
实在想不出到底哪里有问题

如果同一台服务器上没有能正常显示的代码,那应该是配置问题。
如果有能正常显示的代码 把正常的代码改成这文件相同的内容,不正常看改了那句出问题
改成这个的文本还能正常显示的话用16进制查看器对比一下两个文件

估计是服务器默认配置了
实在想不出到底哪里有问题

如果同一台服务器上没有能正常显示的代码,那应该是配置问题。
如果有能正常显示的代码 把正常的代码改成这文件相同的内容,不正常看改了那句出问题
改成这个的文本还能正常显示的话用16进制查看器对比一下两个文件



我服务器上其它码没有问题。
而且,
我将此文件移动个目录就可以正常访问了。。。。

http://parttime.wengege.com/h/test.html
上面连接也是,在chrome下有乱码(JS引入时有乱码,奇怪的是其它部分乱码好了)。在ie下完全正常。

nginx的配置问题?换apache测试一下?





结论是不言而喻的

login 模板文件是utf-8编码,但php程序header声明或服务器默认配置输出的响应头是gbk, utf-8,就会出现webkit和chrome乱码,而IE正常
test 模板文件本身是gb2312编码,响应头仍然是gbk, utf-8,就会出现9楼的情况

我猜想,webkit和chrome识别编码,响应头优先于DOM中header声明,而IE恰好相反
我看到楼主服务器上的js文件响应头charset都是gbk,utf-8,应该是服务器默认输出的问题了

看完以上的回?,想到一???。
?不?在??目?有?置.htaccess,在.htaccess中?置了default charset呢?





结论是不言而喻的


是的,GBK哪来的?关键是GBK哪来的?版主。亲爱的。方向搞错了。我也在思考,GBK到底是从哪来的?
我知道问题出现在GBK上面。GBK是结果,而不是开头。

看完以上的回?,想到一???。
?不?在??目?有?置.htaccess,在.htaccess中?置了default charset呢?


昨天就检查过了,没有发现。htaccess文件中有编码问题。

login 模板文件是utf-8编码,但php程序header声明或服务器默认配置输出的响应头是gbk, utf-8,就会出现webkit和chrome乱码,而IE正常
test 模板文件本身是gb2312编码,响应头仍然是gbk, utf-8,就会出现9楼的情况

我猜想,webkit和chrome识别编码,响应头优先于DOM中header声明,而IE恰好相反
我看到楼主服务器上的js文件响应头charset都是gbk,utf-8,应该是服务器默认输出的问题了


没有找到任何地方有header问题。同时没有login模板。这就是普通的html,不是什么模板。多谢关注。

不会
.htaccess 中
AddDefaultCharset gbk
AddDefaultCharset utf-8
则结果是 Content-Type: text/html; charset=utf-8
即只有最后一条指令有效

倒是,如果
AddDefaultCharset gbk,utf-8
那么就是 Content-Type: text/html; charset=gbk,utf-8 了

于是问题又绕回去了,字符集声明是设定的,而不是内置的



看完以上的回?,想到一???。
?不?在??目?有?置.htaccess,在.htaccess中?置了default charset呢?

现在问题是:所有文件都检查过了(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毛关系都扯不上啊?

你的 js 文件也有 Content-Type: text/html; charset=gbk,utf-8
显然是 web 服务器配置文件里面的事情了
你在服务器配置文件中找 gbk 字样,应该就能找到的

实在不想找的话,就在 .htaccess 中加入
AddDefaultCharset utf-8

这有覆盖了原有的设置了

你保存时选无bom再试试,我抓包发现你的html有bom头

新发现:有bom头居然导致偶的浏览器,选择编码的菜单变灰?

没有找到任何地方有header问题。同时没有login模板。这就是普通的html,不是什么模板。多谢关注。


html和模板同理啊~我猜测出了2个问题的原因,IE一直坚挺不乱(响应头和DOM编码声明的优先级不同),还有为什么test正文反而不乱了(也许test.html文件是gbk编码而login.html是utf-8),另外你说:我换到其它test目录,则内容完好显示。会不会也是文件变成了gbk编码的原因?至于最关键的为什么响应头有gbk超出我知识范围了,关注学习一下

问题原因找到,是nginx此网站配置时使用了charset gbk,utf-8 这样设置了。去掉gbk就ok了。所以乱码解决。

问题原因找到,是nginx此网站配置时使用了charset gbk,utf-8 这样设置了。去掉gbk就ok了。所以乱码解决。



一开始在10楼就提出配置问题,微弱的存在感被无视了

而且,我换到其它test目录。则内容完好显示。



被?句??了。

?目?,??都是?出??的。因?default charset是gbk,utf8.

亲,你说的nginx配置,太大了。我指的配置是指此虚拟主机的配置。此nginx上有好多个网站,其它没有问题的。


问题原因找到,是nginx此网站配置时使用了charset gbk,utf-8 这样设置了。去掉gbk就ok了。所以乱码解决。



一开始在10楼就提出配置问题,微弱的存在感被无视了


而且,我换到其它test目录。则内容完好显示。



被?句??了。

?目?,??都是?出??的。因?default charset是gbk,utf8.

换目录后,不知道咋加上bom头了,所以可以了。

亲,你说的nginx配置,太大了。我指的配置是指此虚拟主机的配置。此nginx上有好多个网站,其它没有问题的。



其他网站没事,12楼就提到js文件响应头就是gbk,utf-8,瞬间可以锁定目标啊~
你们研究半天php脚本和BOM,新人难得蒙对一次 怨念的看着你们
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
您如何防止与会议有关的跨站点脚本(XSS)攻击?您如何防止与会议有关的跨站点脚本(XSS)攻击?Apr 23, 2025 am 12:16 AM

要保护应用免受与会话相关的XSS攻击,需采取以下措施:1.设置HttpOnly和Secure标志保护会话cookie。2.对所有用户输入进行输出编码。3.实施内容安全策略(CSP)限制脚本来源。通过这些策略,可以有效防护会话相关的XSS攻击,确保用户数据安全。

您如何优化PHP会话性能?您如何优化PHP会话性能?Apr 23, 2025 am 12:13 AM

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显着提升应用在高并发环境下的效率。

什么是session.gc_maxlifetime配置设置?什么是session.gc_maxlifetime配置设置?Apr 23, 2025 am 12:10 AM

thesession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceIsiseededeedeedeedeedeedeedto to to avoidperformance andununununununexpectedLogOgouts.3)

您如何在PHP中配置会话名?您如何在PHP中配置会话名?Apr 23, 2025 am 12:08 AM

在PHP中,可以使用session_name()函数配置会话名称。具体步骤如下:1.使用session_name()函数设置会话名称,例如session_name("my_session")。2.在设置会话名称后,调用session_start()启动会话。配置会话名称可以避免多应用间的会话数据冲突,并增强安全性,但需注意会话名称的唯一性、安全性、长度和设置时机。

您应该多久再生一次会话ID?您应该多久再生一次会话ID?Apr 23, 2025 am 12:03 AM

会话ID应在登录时、敏感操作前和每30分钟定期重新生成。1.登录时重新生成会话ID可防会话固定攻击。2.敏感操作前重新生成提高安全性。3.定期重新生成降低长期利用风险,但需权衡用户体验。

如何在PHP中设置会话cookie参数?如何在PHP中设置会话cookie参数?Apr 22, 2025 pm 05:33 PM

在PHP中设置会话cookie参数可以通过session_set_cookie_params()函数实现。1)使用该函数设置参数,如过期时间、路径、域名、安全标志等;2)调用session_start()使参数生效;3)根据需求动态调整参数,如用户登录状态;4)注意设置secure和httponly标志以提升安全性。

在PHP中使用会议的主要目的是什么?在PHP中使用会议的主要目的是什么?Apr 22, 2025 pm 05:25 PM

在PHP中使用会话的主要目的是维护用户在不同页面之间的状态。1)会话通过session_start()函数启动,创建唯一会话ID并存储在用户cookie中。2)会话数据保存在服务器上,允许在不同请求间传递数据,如登录状态和购物车内容。

您如何在子域中分享会议?您如何在子域中分享会议?Apr 22, 2025 pm 05:21 PM

如何在子域名间共享会话?通过设置通用域名的会话cookie实现。1.在服务器端设置会话cookie的域为.example.com。2.选择合适的会话存储方式,如内存、数据库或分布式缓存。3.通过cookie传递会话ID,服务器根据ID检索和更新会话数据。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中