各位大侠啊,小弟最近在做web编程时遇到了很多字符编码和中文乱码的问题,把我快整疯了!
我用的开发平台是windows+php5+apache+mysql
我现在有一个很头疼的问题,烦请高手给予解决。
我的PHP.ini配置文件中设置default_charset="GB2312"或"utf-8",我在写.html(或者.php)文件时,保存成某一种编码格式,比如utf-8,在文件的head里面加入<meta http-equiv="Content-Type" Content="text/html;charset=utf-8"/>或者<meta http-equiv="Content-Type" Content="text/html;charset=gb2312"/>
我的问题就是:这三个地方的设置到底是什么意义?这三个地方的设置有什么关系?这三个地方的设置彼此之间有什么影响?到底应该怎么设置才能彻底避免中文乱码问题?
这个问题困扰我好久了,弄得我心情很不好,烦请有理解的比较深的高手们给我详细地说一下,感激不尽!

解决方案 »

  1.   

    PHP.ini中的default_charset设置是在PHP输出HTML页面是自动设置页面的charset,比如
    PHP.ini中default_charset = UTF-8
    <?php
    echo "<HTML><Head></Head><body>你好</body><HTML>";
    ?>
    这段输出的时候没有指定输出的charset,但是因为PHP.ini中有设置default_charset,所以它默认是UTF-8编码,浏览器会使用UTF-8来显示输出内容<meta http-equiv="Content-Type" Content="text/html;charset=gb2312"/>
    是指定输出给浏览器的HTML页面编码就是GB2312,浏览器会使用GB2312来显示HTML页面,这个设定会覆盖PHP.ini中的default_charset设置你的文件保存的编码只是文件存放的形式,并不是浏览器显示的最终结果,但是如果你把含有中文的编码保存为ASCII,因为中文信息没有正确保存在文件中,所有浏览器也就显示不出来。推荐你保存文件是UTF8编码,那么在default_charset或者<meta charset>也设置为UTF8编码,这样保存和显示始终一直。
      

  2.   

    PHP.ini配置文件中设置default_charset="GB2312"或"utf-8" //这个是php设置时的系统默认的字符编码
    我在写.html(或者.php)文件时,保存成某一种编码格式,比如utf-8//这个跟php.ini  中的设置没有什么影响在文件的head里面加入<meta http-equiv="Content-Type" Content="text/html;charset=utf-8"/>或者<meta http-equiv="Content-Type" Content="text/html;charset=gb2312"/>//Content-Type(显示字符集的设定)设定页面使用的字符集,浏览器会根据此来调用相应的字符集显示页面的内容
     这个要比文件编码一致 ,不然,浏览器查看时,会乱码 
      

  3.   

    一个原则:编码一致文件本身编码:用你的编辑器看一下editplus右下角
    响应编码:服务器默认编码(apache,php.ini),强制响应编码 header()-设定的编码,及meta的编码        优先级可能是:header>meta>服务器---这个是通知浏览器用什么编码打开         另,apache的编码,可能影响url解析。数据库输出编码:和客户端的编码一致 数据库连接后set names 'utf8';数据库自动转码,而不管你实质存的是什么码。
      

  4.   

    知其然也要知其所以然。
    http://hi.baidu.com/yukon_kanzaki/blog/item/28cdd0544b73f055d009065c.html
      

  5.   

    php和apache里面设置的默认编码的作用是 php 程序没有指定 header("content-type:text/html; charst=utf-8");的时候所采用的编码。 这个编码声明是通过http协议的head部分发送的(用firebug可以看到)。 而html文件的头部的meta标签中声明的编码是浏览器下载了网页过后才解析的。
      

  6.   

    PHP.ini配置文件中设置default_charset="GB2312"或"utf-8",是设置网页的默认编码,就是在一个网页没有<meta>声明的时候应该把网页识别成什么编码。
    而你在HEAD里设置<meta http-equiv="Content-Type" Content="text/html;charset=utf-8"/>就是告诉浏览器这个网页是UTF-8编码的。