很多新手朋友学习PHP的时候,发现程序中的中文在输出的时候会出现乱码的问题,那么为什么会出现这种乱码的情况呢?
一般来说,乱码的出现有2种原因:
一种是由于编码(charset) 设置错误,导致浏览器以错误的编码来解析,从而出现了满屏乱七八糟的“天书”
第二种就是文件被以错误的编码打开,然后保存,比如一个文本文件原先是GB2312编码的,却以UTF-8编码打开再保存,就会出现乱码的问题。使用dos系统操作数据库的时候,编码就比较多了,有客户端的编码,服务器的编码,服务器转换数据的编码,服务器返回数据的编码,数据库的默认编码等等...本篇文章,就带大家了解一下,怎么解决乱码的问题。
1. html网页中的乱码
我们在html代码中有一个meta标签,如下:
<meta http -equiv =“Content-Type” content=”text/html; charset=utf-8”/>
或者
<meta charset=”utf-8”/>
那么也就意味着我们的内容是以utf8编码的,那么浏览器如果以gbk的编码解析,就一定会乱码了,所以如果乱码了,就改一下浏览器解析的编码,如下图:
这个时候,页面就正常了
- php页面的乱码
如果php写代码在页面出现乱码了,那么在文档顶部添加一行代码,来声明编码
header("Content-Type:text/html;charset=utf-8");
或者
echo '<meta charset="utf-8" />';
- php操作mysql的乱码
如果用php从数据库查询数据,产生了乱码,那么在连接数据库后执行一行代码
mysql_query("set names utf8");
然后再保证php的编码和客户端(浏览器)的编码保持一致
4.操作数据库的编码
错误为:Invalid default value for sex
;这个错误是由于编码不对无法识别sex字段的中文默认值引起的,只需要在执行这条语句之前执行set names 编码
即可。
因为编码无法写入,查询结果为问号或乱码的,都属于编码问题,在数据中,有一些变量存储的都是各种编码,如下表:
变量名 | 含义 |
---|---|
Character_set_server | Character_set_server |
Character_set_client | 客户端来源使用的字符集,也就是客户端发过来的查询所使用的字符集 |
Character_set_connection | character_set_client将查询转换为character_set_connection设定的字符集 |
Character_set_results | 查询结果编码的字符集 |
Character_set_database | 当前选中数据库的默认字符集 |
Character_set_system | 系统元数据(字段名等)字符集 |
Collation_connection | 执行字符比较时采用的编码规则 |