刚学PHP不久,有一个与编码相关的问题请教大家:
刚用php做站的时候,程序文件都以ansi(记事本默认)格式保存,网页编码设定charset=gb2312,程序中以 mysql_query("SET NAMES 'gbk'")设定,mysql建库建表建字段都从"整理"那选"gbk_chinese_ci",这样整个显示中文都正常的.现在我想以后做站都以"utf-8"编码,现在的问题是数据库读出来的中文显示为乱码了,程序文件以utf-8保存,数据库无论我是以"utf8-general_ci"或"gbk_chinese_ci",网页里怎么改charset,或set names,从库里面读出来的中文都是乱码,请问这是为什么?还有个问题,就是以utf-8保存文件后,浏览器的编码手动就改不过来,但以ansi保存的,改成utf-8却没问题,希望大家能帮我解答.

解决方案 »

  1.   

    网页编码用meta指定
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />数据库连接也要用utf8
    mysql_query("set names 'utf-8'");数据库的表编码格式也要使用utf8
    全部都统一就不会出问题了
      

  2.   

    对于这个问题你首先就要考虑清楚了,使用那个编码,如果真的改的话那就只有转换了,也就是说你数据库是GBK,现在转换成UTF8,这个在网搜也很多的。
      

  3.   

     楼上误会我的意思了,我不是要改以前的站,而是说以后做站想用utf-8格式,现在测试了下没成功
      

  4.   

    <?php
    header("Content-Type:text/html;charset=utf-8");
    $host="localhost";
    $user="XXx
    $password="XXXXXXX";//"";
    $database="test2";mysql_connect($host,$user,$password)  or   die("程序调试中。"); 
    mysql_select_db($database)  or   die("程序调试中。。"); 
    mysql_query("SET NAMES 'utf-8'");$result=mysql_query("select title,content from test");
    $t1=mysql_result($result,0,"title");
    $t2=mysql_result($result,0,"content");print $t1."<BR>";
    print $t2."测试中文";
    ?>
    这是测试代码,数据库mysql的,utf8-general编码,数据是我直接在phpmyadimin插入的
      

  5.   

    那没道理会错啊?
    发一个完整的网页声明和meta来看看
    记事本很方便,但是功能太弱,用Zend或者DW重新存一下比较好
      

  6.   

    补完:关于ansi和utf-8,好像以前有问过。utf-8是unicode的编码方式,国际化的,多语言支持的,所以不管在网页里怎么转,他都会按照你需要的方式解析。
    ansi则是分区域的,中文的ansi专程其他编码就会乱码或者显示成其他方式;
    不知道和楼主要问的是不是一个意思?
      

  7.   

    没有,我就写了那个测试程序,没有其他完整的,也没写meta啊.正因为utf-8是多语言支持的,所以我才打算以后都按这一编码来写.按楼上的意思,如果是utf-8保存,编码方式怎么设定,都会正常显示中文?我现在的情况是,我直接写在程序文件里的中文在哪种情况下显示正常,但从数据库读的内容就是乱码
      

  8.   

    数据库的“语言”一旦设定一般是不宜修改的,如果修改的话,需要重新导入数据,否则总是“乱码”既然你已经设置数据库语言是gbk了,那只能在mysql_query("SET NAMES 'gbk'")设置后操作数据你现在想在页面中使用utf-8 语言,就需要对与数据库相关的数据做gbk、utf-8编码间的转换
      

  9.   

    我这都是做测试,按你说的,我建一新库,按utf-8编码,从phpmyadmin用sql语句插入数据,中文正常显示,这样我去试下.
      

  10.   

    不行的,我在phpmyadmin 建库建表建字段都用的utf-8的编码,试了两种 utf8_general_ci,utf8-unicode_ci
      

  11.   


    mysql_query("set names 'utf-8'"); 这样把出错 ,本人测试过不知道什么原因
    但这样mysql_query("set names utf8");  没问题至于编码,数据库,mysql_query(),php脚本, 三点一线用同一编码绝对没错,有时mysql_query()会自动转换编码
    总结一下:1、数据库:      utf8-general_ci
    2、PHP函数设置: mysql_query("set names utf8");   (在mysql_select_db函数之前设置)
    3、XHTML头设置: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    4、PHP文件编码: utf-8
    以分享为荣,以吹水为耻.
      

  12.   

    输入输出正常,数据库乱码,是因为mysql_query()转换问题没设置好