`
shuai1234
  • 浏览: 972228 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

php中文乱码解决方案

    博客分类:
  • PHP
阅读更多

一般来说,乱码的出现有2种原因,首先是由于编码(charset)设置错误,导致浏览器以错误的编码来解析,从而出现了满屏乱七八糟的“天书”,其次是文件被以错误的编码打开,然后保存,比如一个文本文件原先是GB2312编码的,却以UTF-8编码打开再保存。要解决上述乱码问题,首先需要知道开发中哪些环节涉及到了编码:
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开发中哪些地方涉及到了编码,也就知道了乱码产生的原因:上述3项编码设置不一致,由于各种编码绝大部分是兼容ASCII的,所以英文符号不会出现,中文就倒霉了。下面是一些常见的错误情况与解决:
1、数据库采用UTF8编码,而页面申明编码是GB2312,这是最常见的产生乱码的原因。这时候在PHP脚本里面直接SELECT数据出来的就是乱码,需要在查询前先使用:
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项编码都设置正确了还是有乱码。比方说网页是GB2312编码的,IE等浏览器打开却总是识别成UTF-8,网页 HEAD里面已经申明是GB2312了,手动修改浏览器编码为GB2312 后页面显示正常。产生原因是服务器Apache设定了服务器全局的默认编码,在httpd.conf里面加了AddDefaultCharset UTF-8。这时候服务器会首先发送HTTP头给浏览器,其优先级比页面里申明编码高,自然浏览器就识别错了。解决办法有2个,请管理员在配置文件自己的虚机里加上一条AddDefaultCharset GB2312来覆盖全局配置,或者在自己目录的.htaccess里配置。

分享到:
评论

相关推荐

    PHP+MySql中文乱码解决方案

    ### PHP+MySQL中文乱码解决方案 #### 一、概述 在使用PHP与MySQL进行Web开发的过程中,中文乱码问题是常见的一个问题。通常情况下,这主要是由于系统各部分(如PHP脚本、MySQL数据库、操作系统等)之间的字符编码...

    PHP中文乱码解决方案_.docx

    通过上述方法,我们可以有效地解决PHP在处理中文字符时可能出现的乱码问题。在实际开发中,还需要注意在HTML头部设置正确的编码声明(如`&lt;meta charset="UTF-8"&gt;`),并且在数据库连接时指定正确的字符集,以确保...

    PHP中文乱码解决方案

    汉字乱码真是一个悲催的事情,JAVA讨厌汉字,PHP也不喜欢汉字;  Java乱码最终使用了spring给出的过滤器来过滤,处处过滤,其实影响了速度,不过没有办法,汉字就是W国首先不考虑的事情;  想不到PHP也是乱码处...

    史上最全的PHP+MySql中文乱码解决方案.rar

    本资源“史上最全的PHP+MySql中文乱码解决方案”提供了全面的指南,帮助开发者解决可能出现的中文乱码问题。以下是这个问题的相关知识点: 1. **字符编码基础**: - **ASCII编码**:最初的字符编码,只能表示英文...

    ajax乱码解决方案

    **Ajax 乱码解决方案** Ajax 乱码问题在开发Web应用程序时经常遇到,尤其是在涉及到不同编码格式时。本文将深入探讨Ajax与字符编码相关的技术细节,并提供几种有效的解决策略。 首先,JavaScript处理字符的方式是...

    史上最全的PHP+MySql中文乱码解决方案.pdf

    《PHP+MySQL中文乱码问题全面解析与解决方案》 在编程世界中,中文乱码问题一直是困扰开发者的一大难题,尤其在PHP与MySQL结合的环境中,由于编码不一致,乱码现象更为常见。本文将深入探讨PHP和MySQL中文乱码产生...

    MySQL乱码解决方案数据库乱码

    #### 四、MySQL乱码解决方案 1. **检查MySQL服务器端字符集设置**: - 使用命令`SHOW VARIABLES LIKE 'character_set_%';`来查看当前MySQL服务器上的各种字符集设置。 - 如果发现任何一项字符集设置不正确(比如...

    史上最全的PHP+MySql中文乱码解决方案.docx

    本文将深入探讨这一问题,并提供全面的解决方案。 首先,我们需要理解乱码的根本原因。乱码通常是因为文件、网页、数据库以及PHP脚本之间的编码不匹配。在PHP与MySQL的环境中,常见的编码类型包括GBK、GB2312以及...

    Linux下网页乱码解决方案

    本文将深入探讨Linux下网页乱码的解决方案,帮助用户理解和解决这一常见问题。 ### 一、理解网页乱码的原因 网页乱码主要由以下几种情况引起: 1. **字符集不匹配**:网页服务器发送的数据和浏览器接收数据时使用...

    史上最全的PHP+MySql中文乱码解决方案文.pdf

    本文将深入探讨PHP与MySQL在处理中文字符时可能出现的乱码问题,并提供一系列全面的解决方案。 首先,我们需要了解编码的基础知识。常见的中文编码有GBK、GB2312和UTF-8。GBK是GB2312的扩展,包含了更多的汉字。UTF...

    Mysql中文乱码问题解决方案

    **解决方案:** 1. **服务器层面**:修改`my.cnf`,添加或修改`[mysqld]`下配置: ``` character-set-server=utf8 collation-server=utf8_general_ci ``` 2. **客户端连接**:使用MySQL命令行或第三方工具时,...

    完美解决PHP中文乱码

    ### 完美解决PHP中文乱码 #### 一、PHP网页的编码问题 在处理PHP中文乱码问题时,首要任务是确保PHP文件本身的编码与其所声明的网页编码相匹配。这涉及到设置正确的HTTP头部信息以及调整文件的实际编码格式。 ###...

    mysql乱码解决方案

    以下是对“mysql乱码解决方案”这一主题的深入探讨,旨在提供全面且权威的解决策略。 ### MySQL乱码成因分析 1. **系统环境设置**:操作系统、服务器或应用程序的默认字符集与MySQL数据库不一致。 2. **数据库配置...

    史上最全的PHP+MySql中文乱码解决方案分享.pdf

    总的来说,解决PHP和MySQL的中文乱码问题需要从整个数据流的起点到终点进行检查,确保每个环节的编码一致性。从PHP文件、数据库配置、数据库表和字段、用户输入到文件操作,每一步都应仔细考虑并设定正确的编码。...

Global site tag (gtag.js) - Google Analytics