曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4684|回复: 0
打印 上一主题 下一主题

header() 函数, html 之 meta, Apache 之 AddDefaultCharset

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
跳转到指定楼层
楼主
发表于 2012-7-4 21:49:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有些时候,你会在 <head> </head> 里添加下面的语句以告诉浏览器要以什么样的编码来显示网页(xxxxx 可以代表任一字符集,如 utf8, gb2312 等):
[Plain Text] 纯文本查看 复制代码
 <meta http-equiv="Content-Type" content="text/html; charset=xxxxx"> 

但结果往往不随人愿,网页仍然是乱码。究其原因,是和 Apache 服务器的配置有关。下面用实验来说明这个问题。

现在我的 Apache 服务器的配置文件里对默认的字符项设置为:AddDefaultCharset GB2312

我有一个页面是 UTF8 编码的,那么我我即使添加 <meta http-equiv="Content-Type" content="text/html; charset=utf8"> 这条语句,网页仍然会显示乱码,从浏览器对当前页面所采取的编码格式也能看到是采用 GB2312 来显示的。由此可见,上面的 meta 语句并不起作用,起作用的是 Apache 里的 AddDefaultCharset  设置。道理是明显的,因为客户端浏览器请求的页面是经过 HTTP 服务器进行处理的。因此,即使网页中使用了 meta 标签并指定了要采用的字符集,但是当服务器将该页面返回给客户浏览器时,会修改用户定义的 meta 标签。也就是说,你网页中的 meta 标签虽然设置的是 utf8 ,但是在发给浏览器时,被浏览器强制改为 GB2312 了。这样一来,原本使用 UTF8 编码的页面(含有中文)在客户端肯定看起来就乱码了,因为你无法用 GB2312 的编码来解析 UTF8 的编码。

因此,解决的办法是修改服务器的编码配置,如将 AddDefaultCharset 改为 UTF8 就好了。但是如果这是台虚拟主机,你并没有修改服务器的权限,那么如果你用的是 PHP 程序时,可以使用 header()  函数告诉 Apache 你要使用的编码,在这种情况下,Apache  就不会再强制使用它自己的配置了。

从上面分析来看,如果使用的是 Apache HTTP 服务器,那么采用的编码优先级为:Header() > Apache 的设置 > Meta 标签

另外还有一种是查询数据库时也会涉及到编码的情况,对此可参考《
SET NAMES 分析详解》
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-4-30 09:51 , Processed in 0.061908 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表