`
晨星★~雨泪
  • 浏览: 448322 次
  • 性别: 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实例开发源码-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开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例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