`
晨星★~雨泪
  • 浏览: 449006 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

PHP+apache+mysql编程中乱码问题的解决

阅读更多
作者: 乐道   
2007-11-12

一般来说,乱码的出现有2种原因,首先是由于编码(charset)设置错误,导致浏览器以错误的编码来解析,从而出现了满屏乱七八糟的“天书”,其次是文件被以错误的编码打开,然后保存,比如一个文本文件原先是GB2312编码的,却以UTF-8编码打开再保存。要解决上述乱码问题,首先需要知道开发中哪些环节涉及到了编码。。

一般来说,乱码的出现有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里配置。

2006.4.4后注:感谢JunChen告知:在HTML页面HEAD区里,<meta http-equiv="Content-Type" content="text/html; charset="XXX" />这句一定要写在<title>XXX</title>前面,否则会导致页面一片空白(仅限IE+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开发中哪些地方涉及到了编码,也就知道了乱码产生的原因:上述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里配置。

2006.4.4后注:感谢JunChen告知:在HTML页面HEAD区里,<meta http-equiv="Content-Type" content="text/html; charset="XXX" />这句一定要写在<title>XXX</title>前面,否则会导致页面一片空白(仅限IE+PHP)。

以上是我前些时间工作中遇到问题的总结与经验,如有错误,欢迎指正!

转载请以文字链接形式注明来源: 徐州网站建设
分享到:
评论

相关推荐

    MYSQl处理中文乱码.txt

    由于它的强大功能、灵活性、丰富的应用编程接口(API)以及精巧的系统结构,受到了广大自由软件爱好者甚至是商业软件用户的青睐,特别是与Apache和PHP/PERL结合,为建立基于数据库的动态网站提供了强大动力。

    PHP+MySql制作个人博客系统-完整教程

    在学习过程中,我们不仅要掌握技术细节,还要培养解决问题的能力,学习如何查找资源和文档,以及如何有效地测试和调试代码。这本教程将以逐步指导的方式,带领初学者从零开始构建出一个功能完备的个人博客系统。

    FCKeditor编辑器 中文乱码问题 彻底解决方案(提供附件)

    本文将深入探讨FCKeditor编辑器中的中文乱码问题及其彻底解决方案。 中文乱码问题通常源于字符编码不一致。在计算机系统中,不同的程序或文件可能使用不同的字符编码,如ASCII、GBK、UTF-8等。当这些程序或文件互相...

    PHP使用PDO操作数据库的乱码问题解决方法

    如果读者在实际应用中遇到乱码问题,首先需要检查上述环节的设置是否正确,从而快速定位和解决问题。 综上所述,PHP使用PDO操作数据库时遇到的乱码问题通常可以通过设置正确的编码来解决。通过示例代码及详细解释,...

    基于PHP的leftD时代多元化网站管理系统GBk源码.zip

    使用GBK编码的leftD系统能确保在处理中文内容时不会出现乱码问题,从而提高用户体验。 在实际应用中,leftD系统的安装和配置可能涉及以下几个关键步骤: 1. 服务器环境搭建:需要一个支持PHP运行的服务器环境,比如...

    PHP配置心得包含MYSQL5乱码解决

    PHP 5.1.6 APACHE 2.0.59(注意:APACHE 2.2.X版本以上是不支持PHP 5的) MYSQL 5.0.24a 好了,现在开始安装,我先装的php5,直接解压文件到C:\php(安装到哪里并不会有影响,凭个人喜号,本文中的所有路径都以我...

    PHP程序设计-3期(KC016) 1.3.1Ubuntu下安装常见问题.doc

    在PHP程序设计中,特别是在Ubuntu环境下进行开发时,可能会遇到一系列安装和配置上的问题。以下是对这些常见问题的详细解答...通过实践和解决问题,你将更好地掌握PHP在Ubuntu下的安装和配置,进一步提升你的编程技能。

    php手册PHP5研究室编无乱码版本chm

    44. PHP 扩展库编程 API 指南 45. Zend API:深入 PHP 内核 46. 扩展 PHP 3 VIII. FAQ:常见问题 47. 一般信息 48. 邮件列表 49. 获取 PHP 50. 数据库问题 51. 安装常见问题 52. 编译问题 53. 使用 PHP ...

    PHP 开发中的中文编码问题

    总之,理解和掌握字符编码在PHP开发中的应用,以及如何在数据库、页面和服务器之间协调这些编码,是避免中文乱码问题的关键。通过细致的调试和适当的编码设置,可以有效地解决这些问题,实现中文内容的正确显示。

    最新版appserv和yourphp

    它集成了Apache服务器、MySQL数据库、PHP编程语言以及Perl和PHPMyAdmin等其他必要的组件,使得用户无需逐一安装和配置这些组件,大大简化了PHP开发环境的搭建过程。Appserv-win32-2.6.0 (2).exe这个文件名表明这是...

    161403320姜吉宁1

    - 在开发过程中,可能需要使用echo或其他调试方法定位和解决问题。 5. **问题解决**: - 开发过程中遇到的环境问题,如乱码、系统崩溃,需要熟悉Linux命令行操作,如文件权限修改、系统恢复等。 - 文件丢失后,...

    PHP基础:语法规范.

    7. 对于汉字乱码问题,确保PHP源代码文件采用UTF-8无BOM格式,并在文件顶部添加`header("Content-type:text/html; charset=utf-8")`来指定页面编码。 8. 注释:单行注释使用`//`,多行注释使用`/* ... */`。 9. 在...

    PHP简易图书管理系统

    描述中提到的乱码问题,可能是由于编码不一致导致的。在PHP中,未正确设置字符编码可能导致输出乱码。解决方法是确保PHP文件、数据库和浏览器之间的一致性,通常设置为UTF-8。 6. **PHPstudy环境** "PHPstudy"是...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用PHP 5.0新型字符串输出XML数据 145 实例115 判断字符串中是否存在指定子串 146 2.9 正则表达式...

    PHP实例开发源码-PHPSHE B2C商城系统UTF8.zip

    这个系统采用UTF8编码,确保了在全球范围内的多语言支持,避免了字符乱码问题。以下是关于PHP、B2C商城系统以及PHPSHE系统的一些关键知识点: 1. PHP语言:PHP(Hypertext Preprocessor,超文本预处理器)是一种...

    php社区交流网毕设文档说明

    在网页设计过程中,创建站点时应选择动态的PHP空白页,并确保Dreamweaver的首选参数设置为Unicode (UTF-8),以避免编码不一致导致的乱码问题。如果数据库采用UTF-8字符集,设计时应保持一致,以确保数据的正确显示和...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用PHP 5.0新型字符串输出XML数据 145 实例115 判断字符串中是否存在指定子串 146 2.9 正则表达式...

    深入体验PHP项目开发pdf02

    错误处理和调试是另一个重要话题,良好的错误处理机制能帮助开发者快速定位并解决问题。这部分可能包括了错误报告级别、异常处理、日志记录以及使用Xdebug等工具进行调试。 此外,项目开发还可能涉及模板引擎,如...

    基于PHP的DESTOON4.0企业模板橙色模板(UTF8+GBK)php版源码.zip

    DESTOON是一款功能强大的企业建站系统,专为中小企业打造,提供了一整套完善的网站解决方案。基于PHP语言开发,它支持多种数据库,如MySQL,具备良好的可扩展性和安全性。DESTOON4.0版本是该系统的升级版,带来了更...

Global site tag (gtag.js) - Google Analytics