php数据库乱码
Ⅰ php页面解决乱码问题
1、文件编码:指的是页面文件(.html,.php等)本身是以何种编码来保存的。记事本和Dreamweaver在打开页面时候会自动识别文件编码因而不太会出问题。而ZendStudio却不会自动识别编码,它只会根据首选项的配置固定以某种编码打开文件,如果工作时候一不注意,用错误编码打开文件,做了修改之后一保存,乱码就出现了(我深有体会)。
2、页面申明编码:在HTML代码HEAD里面,可以用<meta http-equiv="Content-Type" content="text/html; charset="XXX" />来告诉浏览器网页采用了什么编码,目前中文网站开发中XXX主要用的是GB2312和UTF-8两种编码。
3、数据库连接编码:指的是进行数据库操作时候以哪种编码与数据库传输数据,这里需要注意的是不要与数据库本身的编码混淆,比如Mysql内部默认是latin1编码,也就是说Mysql是以latin1编码来存储数据,以其他编码传输给Mysql的数据会被转换成latin1编码。
知道了WEB开发中哪些地方涉及到了编码,也就知道了PHP页面乱码产生的原因:上述3项编码设置不一致,由于各种编码绝大部分是兼容ASCII的,所以英文符号不会出现,中文就倒霉了。下面是一些常见的错误情况与解决:
1、数据库采用UTF8编码,而页面申明编码是GB2312,这是最常见的产生乱码的原因。这时候在PHP脚本里面直接SELECT数据出来的就是PHP页面乱码,需要在查询前先使用:
mysql_query("SET NAMES GBK"); 来设定MYSQL连接编码,保证页面申明编码与这里设定的连接编码一致(GBK是GB2312的扩展)。如果页面是UTF-8编码的话,可以用:
mysql_query("SET NAMES UTF8"); 注意是UTF8而不是一般用的UTF-8。假如页面申明的编码与数据库内部编码一致可以不设定连接编码。
注:事实上MYSQL的数据输入输出比上面讲的更复杂一些,MYSQL配置文件my.ini中定义了2个默认编码,分别是[client]里的default-character-set和[mysqld]里的default-character-set来分别设定默认时候客户端连接和数据库内部所采用的编码。我们上面指定的编码其实是MYSQL客户端连接服务器时候的命令行参数character_set_client,来告诉MYSQL服务器接受到的客户端数据是什么编码的,而不是采用默认编码。
2、页面申明编码与文件本身编码不一致,这种情况很少发生,因为如果编码不一致美工做页面时候在浏览器看到的就是乱码了。更多时候是发布以后修改一些小BUG,以错误编码打开页面然后保存导致的。或者是用某些FTP软件直接在线修改文件,比如CuteFTP,由于软件编码配置错误而导致转换错了编码。
3、一些租用虚拟主机的朋友,明明上述3项编码都设置正确了还是有PHP页面乱码。比方说网页是GB2312编码的,IE等浏览器打开却总是识别成UTF-8,网页HEAD里面已经申明是GB2312了,手动修改浏览器编码为GB2312后页面显示正常。产生原因是服务器Apache设定了服务器全局的默认编码,在httpd.conf里面加了AddDefaultCharset UTF-8。这时候服务器会首先发送HTTP头给浏览器,其优先级比页面里申明编码高,自然浏览器就识别错了。解决办法有2个,请管理员在配置文件自己的虚机里加上一条AddDefaultCharset GB2312来覆盖全局配置,或者在自己目录的.htaccess里配置。
Ⅱ php中为什么插入数据库的中文变成乱码
请将数据库的编码,表的编码以及字段的编码与网页代码的编码保持一致。
另外注意文件本身的编码与html代码头meta中的编码说明保持一致。
那你看看是不是在连接数据库的时候采用了utf8格式,语法如mysql_query('set
names
utf8');
Ⅲ php显示数据库里的中文乱码.。ps:数据库和php显示都设置了utf8,为什么还会显示乱码求解答!!
原因:
这个是因为你的浏览默认解析编码不是 UTF-8,这种情况浏览器他不知道你的文字要显示 什么编码。
解决方案:
要么设置浏览器默认编码为 UTF-8
在输出打印前,先输出 <meta charset="utf-8">来告诉浏览器你想要使用的编码方式。
栗子:
echo '<meta charset="utf-8">';//将这行放到第一行输出
echo "<tr><><tr/>";//
Ⅳ php读取mysql中文数据出现乱码的解决方法
1.PHP页面语言本身的编码类型不合适,这时候,你直接在脚本中写的中文肯定是乱码,不用说数据库了
解决方法:选择'UTF8'或者'gb2312',这样客户浏览器会自动选择并出现正确的中文显示。注意:'UTF8'或者'gb2312'都可以正确显示中文的。
2.数据库MySQL中的编码类型不正确。
解决方法:创建数据库的时候,MySQL
字符集选择'UTF8',MySQL
连接校对选择utf8_general_ci,这样创建的数据库用来存储中文肯定没有问题,
否则,你的中文首先在MySQL中就是乱码,更不要期望它会给你在PHP页面中显示正确。
3.与平时的脚本编辑环境有关。比如,有些内容是自己用word写的,有些是用记事本写的,有些用editplus、ultraplus等文本编辑器。有时候就直接在DW中写中文了,
解决方法:尽量用同一种编辑器。如果是拷贝来得既有的内容,建议用ultraplus中的编码转换功能把它转换成utf8或者gb2312。
到底转换成什么类型并不重要,关键要求你的PHP
WEB应用程序中的编码要一致就行。
4.编程访问
MySQL时,建议添加一行代码:mysql_query("SET
NAMES
'GBK'");
Ⅳ php乱码怎么办
PHP中文乱码一般是字符集问题,编码主要有下面几个问题。
一.首先是PHP网页的编码
1.php文件本身的编码与网页的编码应匹配
a.如果欲使用gb2312编码,那么php要输出头:header(“Content-Type: text/html; charset=gb2312"),静态页面添加<meta http-equiv="Content-Type" content="text/html; charset=gb2312">,所有文件的编码格式为ANSI,可用记事本打开,另存为选择编码为ANSI,覆盖源文件。
b.如果欲使用utf-8编码,那么php要输出头:header(“Content-Type: text/html; charset=utf-8"),静态页面添加<meta http-equiv="Content-Type" content="text/html; charset=utf-8">,所有文件的编码格式为utf-8。保存为utf-8可能会有点麻烦,一般utf-8文件开头会有BOM,如果使用session就会出问题,可用editplus来保存,在editplus中,工具->参数选择->文件->UTF-8签名,选择总是删除,再保存就可以去掉BOM信息了。
2.php本身不是Unicode的,所有substr之类的函数得改成mb_substr(需要装mbstring扩展);或者用iconv转码。
二.PHP与Mysql的数据交互
PHP与数据库的编码应一致
1.修改mysql配置文件my.ini或my.cnf,mysql最好用utf8编码
[mysql]
default-character-set=utf8
[mysqld]
default-character-set=utf8
default-storage-engine=MyISAM
在[mysqld]下加入:
default-collation=utf8_bin
init_connect='SET NAMES utf8'
2.在需要做数据库操作的php程序前加mysql_query("set names '编码'");,编码和php编码一致,如果php编码是gb2312那mysql编码就是gb2312,如果是utf-8那mysql编码就是utf8,这样插入或检索数据时就不会出现乱码了
三.PHP与操作系统相关
Windows和Linux的编码是不一样的,在Windows环境下,调用PHP的函数时参数如果是utf-8编码会出现错误,比如move_uploaded_file()、filesize()、readfile()等,这些函数在处理上传、下载时经常会用到,调用时可能会出现下面的错误:
Warning: move_uploaded_file()[function.move-uploaded-file]:failed to open stream: Invalid argument in ...
Warning: move_uploaded_file()[function.move-uploaded-file]:Unable to move '' to '' in ...
Warning: filesize() [function.filesize]: stat failed for ... in ...
Warning: readfile() [function.readfile]: failed to open stream: Invalid argument in ..
在Linux环境下用gb2312编码虽然不会出现这些错误,但保存后的文件名出现乱码导致无法读取文件,这时可先将参数转换成操作系统识别的编码,编码转换可用mb_convert_encoding(字符串,新编码,原编码)或iconv(原编码,新编码,字符串),这样处理后保存的文件名就不会出现乱码,也可以正常读取文件,实现中文名称文件的上传、下载。
其实还有更好的解决方法,彻底与系统脱离,也就不用考虑系统是何编码。可以生成一个只有字母和数字的序列作为文件名,而将原来带有中文的名字保存在数据库中,这样调用move_uploaded_file()就不会出现问题,下载的时候只需将文件名改为原来带有中文的名字。实现下载的代码如下
header("Pragma: public");
header("Expires: 0");
header("Cache-Component: must-revalidate, post-check=0, pre-check=0");
header("Content-type: $file_type");
header("Content-Length: $file_size");
header("Content-Disposition: attachment; filename=\"$file_name\"");
header("Content-Transfer-Encoding: binary");
readfile($file_path);
$file_type是文件的类型,$file_name是原来的名字,$file_path是保存在服务上文件的地址。
Ⅵ php 添加语句数据库出现乱码
连接完数据库要mysql_query('SET
NAMES
GBK');
该PHP文件保存类型要为ANSI
数据库的连接形式什么的也要是gbk的
最后实在不行你就把插入到数据库中的数据执行一下转码iconv(“UTF-8″,”GBK”,$data);
再不行
哥也无语了
Ⅶ 高手求救,php调用mysql数据库不能显示中文呈乱码
以前的国外主机用的Mysql是4.x系列的,感觉还比较好,都无论GBK和UTF-8都没有乱码,没想到新的主机的Mysql是5.0版本的,导入数据后,用Php读出来全是问号,乱码一片,记得我以前也曾经有过一次切换出现乱码的经验,原因肯定是Mysql版本之间的差异问题。
只好查资料,发现了一个解决方法,就是在mysql_connect后面加一句SET
NAMES
UTF8,即可使得UTF8的数据库消除乱码,对于GBK的数据库则使用SET
NAMES
GBK,代码如下:
$mysql_mylink
=
mysql_connect($mysql_host,
$mysql_user,
$mysql_pass);
mysql_query("SET
NAMES
'GBK'");
Ⅷ PHP在显示数据库中的中文数据时显示乱码
其实,只要注意文件编写的时候编码、数据库的编码一般就不会有这个问题的,但是,比如你用DW(dwcs4貌似没有这个现象)打开文件,它会以默认的编码读取,一旦你保存了,那就完了,用EditPlus打开之后,右下角有编码提示,如果发现不对,另存为,覆盖一下,就可以了
Ⅸ php中sql数据库乱码的问题
确保
你的文件编码,文件显示编码,数据库编码一致。(有时候可能还需要php管理工具页面代码和前三者一致)就可以了。
比如。你用Dreamweaver
建立了一个php文件----Dreamweaver的默认文件编码格式是UTF-8是的。并且你在你的PHP文件中的
charset
=
utf8。--一般在
<head>
<meta
http-equiv="Content-Type"
content="text/html;
charset=utf8"
/>
这样的位置。
然后你的数据库编码是UTF8
。可以用SQL语句
,set
一下
。具体怎么弄,自己查一下。
再然后,如果你用类似于PHPMYADMIN这样的工具,在浏览的时候用右键看看网页的编码是不是UTF8。如果不是改下就OK了。
Ⅹ php查询数据库乱码
MySQL和PHP产生乱码的原因:◆MySQL数据库的默认编码是utf8,如果这与你的PHP页面编码不一致,会造成MySQL乱码;◆MySQL创建表,让你选择一个编码,这种编码与你的网页编码不一致,并能也可能造成MySQL乱码;◆MySQL创建表,添加字段,可以选择的编码,这种编码与你的网页编码不一致,也可能会造成MySQL乱码;◆用户提交页面的编码页显示的数据编码不一致,肯定会引起PHP页面乱码;◆BIG5代码页,如用户输入数据的页面,用户输入是gb2312,这将导致100%的PHP页面乱码;◆PHP页面字符集是不正确的;◆PHP连接到MySQL数据库语句指定的编码不正确的。
注:
很多人都持怀疑态度的MySQL版本不一致导致MySQL和PHP乱码相信看过这个节目,你会不会这么认为。通常你看到某些网站中的文字可能有几种编码,如果你看到中国传统的字符,它可能会BIG5编码,有可能是utf-8编码,GB码更容易,是的,编码的中国传统简体,繁体编码的简化字符,我们必须认识到这一点。如果你正在做一个简体编码的网页,编码为GB2312,香港和台湾的传统访问者提交的信息,它可能会导致乱码的解决方法:
网站为utf-8编码,因此可以兼容在世界上的所有字符。如果网站已在运行很长一段时间,有大量的旧数据不能改变简体中文设置,建议设置为GBK编码的页面,GBK和GB2312的区别就在于:GBK显示更多比GB2312简体中国传统要显示的字符代码,只能用GBK字符。 MySQL和PHP产生乱码的了解很清楚的原因,那么解决的办法是不困难的。
MySQL和PHP乱码的解决方法:
如果你安装MySQL的编码不能改变的,我的很多朋友购买虚拟主机建立网站,无权更改MySQL的安装编码,我们可以跳过,因为只要后面的步聚是正确的,同样作为解决垃圾问题。
PHP入门网 - 常见问题解答