PHP编程乱码问题整理

来源:互联网 发布:淘宝如何设置店铺首页 编辑:程序博客网 时间:2024/06/06 00:05

        以下是对PHP编程中字符乱码问题进行的整理。

        导致乱码的原因是需要交换传递数据的部分之间使用的编码方式不一致,例如:PHP文件的编码格式是UTF-8,而浏览器的显示的编码方式是gb2312,则会导致乱码。

        常见的乱码问题有两类:1、存入数据库中的数据乱码。2、浏览器显示乱码。

        1、存入数据库中的数据乱码问题。首先了解相关的知识:MySQL对于字符集的支持有四个层次: 服务器(server),数据库(database),数据表(table),和连接(connection)。“set names '字符集名称'”是MySQL语句,用来指定MySQL连接中的数据使用的字符集(即编码方式)。语句“set names '字符集名称'”告诉MySQL在PHP发送的SQL语句中的数据使用的字符集,同时指定SQL语句的返回结果集中使用的字符集。例如,“set names 'utf8'”语句告诉服务器将来从这个客户端传来的数据采用字符集UTF-8编码,它还为服务器发送回客户端的结果指定了字符集(例如,如果你使用一个select语句,它表示结果集中的列值使用了什么字符集)。  

        有了以上知识,对存入数据库中的数据乱码的问题的原因就更加清楚了。假设我们的程序(PHP文件)的编码格式是UTF-8的,但数据库连接层的编码方式是latin1(MySQL的默认设置),数据库存储的编码方式也是UTF-8的,当我们从程序发送数据到数据库时,程序UTF-8格式的数据要被使用latin1的数据库连接层处理,由于程序的编码方式和数据库连接层的编码方式不一致,于是便会乱码。要解决乱码问题,只需用MySQL语句“set names '字符集名称'”设置连接层的字符集为UTF-8即可,例如“mysql_query("set names 'utf8'");”。要注意其中的UTF-8,不能写成“mysql_query("set names 'utf-8'");”,只能是“mysql_query("set names 'utf8'");”,MySQL只识别utf8,至少在Windows下是这样。

        总的来说,要避免存入数据库中的数据乱码只需将程序(PHP文件)的编码方式、数据库存储的编码方式以及数据库连接层的编码方式设置成一致的即可。PHP文件的编码方式可以在编辑PHP的文本编辑器中进行设置或在IDE中进行设置,PHP文件产生的数据可以用“iconv()”(其它同样功能的函数也可)进行转码,例如“$contents=iconv("gb2312","utf-8",$contents);”将$contents中数据的编码方式从gb2312转换成UTF-8。数据库存储的编码方式可以在数据库管理客户端中进行设置。数据库连接层编码方式可以使用MySQL语句“set names '字符集名称'”进行设置。例如“mysql_query("set names '字符集名称'");”。

        2、浏览器页面显示乱码问题。这类问题比较简单,只需将PHP文件的编码方式和浏览器显示的编码方式设置成一致即可。可使用PHP语句“header("content-type:text/html;charset=utf-8")”对浏览器的显示所使用的字符集进行强制设定。