PHP脚本程序解析数据库UTF-8字符集几点看法

来源:互联网 发布:centos7 nginx 编辑:程序博客网 时间:2024/05/19 05:01

这两天改Discuz!7.2(UTF-8字符集)时,需要自己写部分php程序,总结了下经验.有如下几点.

如果不幸在安装MySQL时选择了UTF-8字符集,而PHP文件又正好是需要显示MySQL里面的这些字符,基本100%会出现乱码,有如下几种方法.

1.会HTML的人都能想到.将HTML的<meta http-equiv="Content-Type" content="text/html; charset=gb2312">这句改成<meta http-equiv="Content-Type" content="text/html; charset=utf-8">即可.

2.思想和1点差不多.利用php的header()函数修改为utf-8编码.在所有的HTML输出之前加一句

header(”Content-Type: text/html; charset=UTF-8″) ;

3.在你php文件的mysql_select_db()函数后面加一句mysql_query("set names 'utf8'");

4.以上可以解决php文件从数据库里取出来显示的文本都是正常的中文了.但是如果在本php文件中还有中文输出显示,那么用记事本打开你的php文件,选择文件->另存为...,同时编码要选择为utf-8,这样,php文件里的中文也可以正常显示了.EditPlus也可以另存为utf-8.存为utf-8后文件大小会比ANSI编码的有所增加.

 

 

 

附录:

phpchina的这篇文章,应该表达得比我更清楚,拿来用了.原文地址:http://bbs.phpchina.com/viewthread.php?tid=195649&rpid=1642944&ordertype=0&page=1#pid1642944

 

文件编码格式:ANSI(gb2312,GBK),utf-8(那个无bom格式干吗的?)
一般我用到的就这两种格式。

首先保存文件的时候分清楚是那种格式。ANSI/UTF-8

以UTF-8格式保存的文件
用meta申明字符集的时候一定要选择utf-8,如下
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
如果使用gb2312、gbk那么页面中的内容会出现乱码(不包括PHP从数据库中读取的内容,就是$row[]中的内容)
在读取数据库文本的时候使用mysql_query("set names utf8");
把读取到的内容以utf-8格式显示出来。

以ANSI格式的文件
meta申明字符集就用gb2312、GBK
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
mysql_query("set names GBK");


<meta>标签申明的字符集只对页面中的文字内容起作用,从数据库提取到的文本就要用mysql_query("set names ?")
来更改内容以何字符集显示。
另外写进数据库的时候可以用任何的字符集,只要不出现乱码就行。只要在提取的时候使用跟文件保存的格式一致就行。
我刚接触的时候对这问题烦恼了很久,网上搜索的资料都不详细,说就说一半也不说说清楚。