PHP,postgresQL,json_encode,sphinx 中文显示乱码解决方法总结

来源:互联网 发布:mac双击选中怎么设置 编辑:程序博客网 时间:2024/05/20 16:33

前言:

        之所以写这边文章,是因为最近一而再再而三的碰到由于编码不一致而导致中文显示出问题。

为什么:

        1、为什么会有存在编码这个问题呢?

        每个计算机软件都会采取自己的一个信息编码方式,所以采用的字符集也不一样。但是采用不同编码方式的计算机软件之间进行通信的话,就会出现“语言障碍”了。就好比不懂中文的外国人看不懂用中文书写个他的邮件一样。

        2、怎么样解决编码不一致---软件之间的“语言障碍”问题呢?

      (1)、编写专门的“语言翻译软件”,实现不同字符集之间的映射。

      (2)、计算机软件之间采用统一编码,无需任何映射。

实战经验:

        下面具体说说我所遇到的编码问题:

        1、浏览器无法识别中文

          为什么在编辑器中输入的中文,在浏览器中却无法识别呢?其实这是一个比较古老的问题。那怎么样解决这个问题呢?

           关键需要保持三个编码方式一致:网页文件存储的编码方式,网页申明的编码方式,浏览器的编码设置;最好保持三者一致。

        2、插入数据库的中文,读取出来后,在网页上显示为乱码

          这个问题有点复杂了。

          首先需要确认数据库的编码方式,我用的是postgresQL,建立数据库的时候初始化为utf8编码方式。但是客户端默认的编码方式(client_encoding)

却是GBK。所以当我们插入数据的时候,数据库会先根据客户端的编码方式将插入的数据转换为utf8编码,然后加以存储。当然从数据中读取那些数据的时候数据库系统会自动将utf8编码转化为gbk编码格式,即逆向转码,但最好是在读取数据库之前加上一句“set names gbk”,以确保客户端的编码方式为gbk,和插入的时候格式保持一致。

        3、json_encode() 中文显示为null

          json 采用的是utf-8的编码方式,所以如果json_encode中的数据有中文就会无法识别而用null来代替。我遇到的问题就是将数据库总读取出来的数据置入json_encode函数中之后显示为乱码。问题的关键在于我从数据库读取出的为gbk编码的数据。所以需要将读取的内容进行转码gbk->utf-8.不同的语言有不同的转码方式,这个需要具体参考api。我的PHP程序操作如下:$row[1] = iconv('gbk', 'utf-8', $row[1]);      $row[1]为实际读取出来的含有中文的数据属性值。