页面乱码问题的根源及其分析

首先, 关闭PHP配置文件php.ini中的default_charset:
1. 页面没有指定charset , Apache配置defaultcharst gbk , 页面文件编码是utf-8
结果: 乱码,使用wireshark抓包,发现服务器返回的header中指明了:


代码如下:

Content-Type:text/html;charset=GB

结论:当页面没有指明charset的时候,Apache的defaultcharset起作用

2. 页面指定charset为utf-8, Apache配置defaultcharset gbk. 页面文件是utf-8


代码如下:

<head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
        <div id="page-header">
         测试Apache DefaultCharset
        </div>
</body>
</html>

结果还是出现乱码。
结论:当Apache配置了DefaultCharset, 将忽略页面的charset申明。

3. PHP header申明charset为utf8, Apache配置defaultcharst gbk,页面文件编码是utf8


代码如下:

header("Content-Type:text/html; charset=utf-8");

结果 : 页面显示正常。

4 Apache设置DefaultCharset off
结果,页面显示正常。

翻阅了下Apache2的手册:
AddDefaultCharset指令
说明当应答内容是text/plain或text/html时,在HTTP应答头中加入的默认字符集
语法AddDefaultCharsetOn|Off|charset
默认值AddDefaultCharsetOff
作用域serverconfig,virtualhost,directory,.htaccess
覆盖项FileInfo
状态核心(C)
模块core
当且仅当应答内容是text/plain或text/html时,此指令将会在HTTP应答头中加入的
默认字符集。理论上这将覆盖在文档体中通过<meta>标 签指定的字符集,但是实际
的行为通常取决于用户浏览器的设置。AddDefaultCharsetOff将会禁用此功能。
AddDefaultCharsetOn将启用Apache内部的默认字符集iso-8859-1。您
也可以指定使用在IANA注册过的字符集名字 中的另外一个charset。
比如说:
AddDefaultCharsetutf-8

也就是说,当Apache不指定defaultcharset的时候,页面编码由页面自己的meta标签指定。
当Apache指定的时候,将忽略页面中的meta标签指定的编码. 但是容许脚本直接header编码方式给客户端

最后,还有一个问题没有得出结果:
当Apache和页面都没有指定的时候, 又如何?
我在自己的机器上,如果都不指定, 默认还是utf8.

(0)

相关推荐

  • 解析PHP中的file_get_contents获取远程页面乱码的问题

    PHP的file_get_contents获取远程页面内容,如果是gzip编码过的,返回的字符串就是编码后的乱码1.解决方法,找个ungzip的函数来转换下2.给你的url加个前缀,这样调用$content = file_get_contents("compress.zlib://".$url);无论页面是否经过gzip压缩,上述代码都可以正常工作!使用curl模块同样可解决问题 复制代码 代码如下: function curl_get($url, $gzip=false){     

  • PHP与MySQL开发中页面乱码的产生与解决

    1.文件编码:指的是页面文件(.html,.php等)本身是以何种编码来保存的.记事本和Dreamweaver在打开页面时候会自动识别文件编码因而不太会出问题.而ZendStudio却不会自动识别编码,它只会根据首选项的配置固定以某种编码打开文件,如果工作时候一不注意,用错误编码打开文件,做了修改之后一保存,乱码就出现了(我深有体会). 2.页面申明编码:在HTML代码HEAD里面,可以用<meta http-equiv="Content-Type" content="

  • 页面乱码问题的根源及其分析

    首先, 关闭PHP配置文件php.ini中的default_charset:1. 页面没有指定charset , Apache配置defaultcharst gbk , 页面文件编码是utf-8结果: 乱码,使用wireshark抓包,发现服务器返回的header中指明了: 复制代码 代码如下: Content-Type:text/html;charset=GB 结论:当页面没有指明charset的时候,Apache的defaultcharset起作用 2. 页面指定charset为utf-8,

  • 如何解决freemarker静态化生成html页面乱码的问题

    目录 freemarker静态化生成html页面乱码的问题 下面是springmvc的核心代码 在网上也查了下大致给了以下几种解决方案 freemarker页面静态化步骤以及相关注意事项 Freemarker 例子 模板 模板 配置文件 总结 freemarker静态化生成html页面乱码的问题 今天在整理之前所学的知识,在复习freemarker生成html页面的时候出现了中文乱码的问题, 在费了一番时间后终于找到问题的原因,觉得挺有意思,就把这段记录下来. 下面是springmvc的核心代码

  • 请求转发jsp页面乱码问题的快速解决方法

    •在最近的项目中 使用了jsp+servlet来开发项目,但是由于后台的不太熟练 导致了困难重重.所幸 学习能力还可以 一边做一遍学吧. •今天的问题:请求转发后页面的乱码问题 •由于特殊原因--图片上传的form表单无法通过ajax提交 因此必须使用form表单直接提交.但是这样会导致一个问题:前后台交互的时候效果不好.为什么效果不好?这里说的不是功能的问题.作为web开发者,客户的体验我们要放在第一位.因此,我们必须将对客户的信息反馈放在一个比较重要的地位.说白了,就是上传个图片成没成功?我

  • 解决VuePress页面乱码问题

    目录 VuePress页面乱码问题 官方步骤 VuePress 初探 建立文件夹 安装 vuepress 初始化 新建文件夹 配置页面 启动 乱码 VuePress页面乱码问题 公司有一个业务场景,需要用到VuePress,所以我这边就研究了一下.VuePress的官方文档写得很详细,步骤也很清晰. 官方步骤 # 创建文件夹 mkdir vuepress-starter cd vuepress-starter # 初始化 git init npm init # 安装Vue Press npm i

  • jQuery页面刷新(局部、全部)问题分析

    本文实例分两部分对jquery刷新问题进行介绍,第一部分介绍了呢页面局部刷新:第二部分介绍了页面全部刷新 第一:页面局部刷新 jQuery对Ajax操作进行了封装,在jQuery中$.ajax()方法属于最底层的方法,第2层是laod().$.get()和$.post()方法,第3层是$.getScript()和$.getJSON()方法. 重点分析load()方法通常用来从Web服务器上获取静态的数据文件.要传递一些参数给服务器中的页面,那么可以使用$.get()或者$.post()方法$.a

  • asp下UTF-8页面乱码的解决方法

    为什么在ASP里指定了codepage为65001还经常显示乱码.才子在这里将这个问题详细解释一下,以免很多朋友再走弯路,甚至排斥UTF-8. 如果你还不知道UTF-8是什么东东,那才子建议你先去搜索一下UTF-8的相关资料吧. UTF-8编码之所以被越来越多的人接受甚至喜欢,肯定是有道理的,在WEB2.0盛行的今天,在大谈多浏览器兼容的同时,不得不想到字符编码不同所造成的乱码现象同样需要得到很好的处理..... 在N年以前,IE6以下的所有版本,只要没有安装相应的字库,访问相关的页面都是会乱码

  • Asp.net中的页面乱码的问题

    1.<globalization requestEncoding="gb2312" responseEncoding="gb2312" /> 或者 <META http-equiv="content-type" content="text/html; charset=gb2312"> 2.下载文件时指定文件名,中文的文件名出现了乱码? Response.AddHeader("Content-D

  • ASP UTF-8页面乱码+GB2312转UTF-8 +生成UTF-8格式的文件(编码)第1/2页

    最好的方法: 先说一下基本的东西: <%@ codepage=65001%>UTF-8 <%@ codepage=936%>简体中文 <%@ codepage=950%>繁体中文 <%@ codepage=437 %>美国/加拿大英语 <%@ codepage=932 %>日文 <%@ codepage=949 %>韩文 <%@ codepage=866 %>俄文 codepage指定了IIS按什么编码读取传递过来的串串(

随机推荐