`
rex_wong
  • 浏览: 17410 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

apache+php 乱码问题解决

    博客分类:
  • php
阅读更多

apache+php 乱码问题解决
转自:忘忧草
如果你在网上搜索 “apache配置”,搜到的页面大多都会建议你在httpd.conf中加上这么一句:AddDefaultCharset GB2312。对于新手而且是只用GB2312编码的开发人来说,这么做是ok的。
但是如果要想使用UTF-8字符集的话,比如 在test.php文件中需要有
meta http-equiv="Content-Type" content="text/html; charset=UTF-8" 这段代码。这时你再打开浏览器访问test.php页面的话,你看到的是正确的页面。但是如果实际上浏览器还是以GB2312编码解释从服务器返回的response,为什么呢?原因是浏览器是根据http应答消息头部中的 Content-type: text/html; charset=GB2312 来决定使用何种编码解释应答,也就是说apache服务器仍然用GB2312编码传递数据。
所以说如果apache的默认字符集被设置成了GB2312,即使在页面中声明使用UTF-8编码,apache服务器还是会按照GB2312编码来传送http response。没关系,我们把AddDefaultCharset GB2312 改成 AddDefaultCharset UTF-8,看看什么结果?如果你看到乱码恭喜你,你还知道是乱码问题;如果你看到是空白页面,那么你就惨了,你可能会以为这是其他什么原因造成的,而不会从编码的角度去考虑怎么解决问题。这是为什么?

原因在于php文件本身是用系统字符集来编码的,中文的windows XP都是用GB2312,每一个文件头部都有字段指示该文件是用何种方式编码的。当apache接到浏览器的请求后,会让php去解释所请求的页面,比如 test.php。php会识别出test.php的编码方式是GB2312后(就像我们用javac编译java源文件时,编译器默认用系统编码读源文件里的内容。如果源文件不是用系统编码来保存的,可以用命令javac -encoding指定具体的编码),把数据以GB2312的编码格式传递给apache,而apache服务器不会改变从php传来的数据,只是在应答消息头部中把字符集设置成UTF-8: Content-type: text/html; charset=UTF-8. 也就是说你传递的是GB2312编码的数据,而浏览器却以UTF-8编码来解释应答消息。

 

 

     由于UTF-8为3个字节表示一个汉子,而普通的GB2312或BIG5是两个。页面输出时,由于上述原因,出现半个汉字的情况,这时该半个汉字会和的>结合成一个乱码字,导致IE无法读完的话,会发现实际上整个叶面全部已经输出了。如果使用的是Mozilla、Mozilla Firefox、Sarafi的浏览器这不会造成这个问题,而是一堆乱码。这是由于Firefox浏览器和IE解析网页编码的策略不同产生的。

 

        OK,我们把test.php以UTF-8保存,再用浏览器访问时,就没有问题了。可这样做,会使得apache目录下的所有web应用只能用同一种编码。如何搞定?

 

解决办法:

  首先,可以使用AddDefaultCharset off来关闭默认文件编码,这样apache服务器就不会在http应答消息头部设置charset,只是设置Content-type: text/html. 而浏览器就会依靠html文件中设置的harset来决定编码。其次,脚本php.ini文件中的default_charset = “UTF-8″作用同httpd.conf文件,把该行注释掉,使php自动识别文件的编码方式。这样不论你用什么编码方式,只要test.php中的
meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ 与你test.php文件编码方式相同,就不会产生乱码问题。

 

用户提交数据的编码

      浏览器提交的字符编码由客户端的characher encoding决定。例如,当前浏览器的编码是Gb2312,用户提交数据后,无论apache设置的编码方式是GB2312还是UTF-8,这时在服务器端接收到的仍是以Gb2312编码的数据。如果要在返回页面上显示用户刚才提交的数据,而该页面是用UTF-8编码的,或者要在数据库中存储的用户提交的数据,而数据库是UTF-8编码的,那就要做字符转换了。

分享到:
评论

相关推荐

    apache+mysql+php 乱码问题.docx

    Apache+MySQL+PHP 乱码问题解决方案 在 Web 开发中,乱码问题是一个常见的问题,特别是在使用 Apache、MySQL 和 PHP 的时候。解决这个问题需要同时配置三个文件:php.ini、my.cnf 和 httpd.conf。这三个文件的配置...

    Windows+Apache+Openssl+MySQL+PHP+ZendOptimizer+eAccelerator+phpMyAdmin+NaviCat 安装与配置笔记.txt

    - 设置字符集:“default_charset="gb2312"”,以解决中文乱码问题。 - 设置session存储路径:“session.save_path="C:\php-5.2.5-Win32\session"”。 - 开启错误显示:“display_errors=On”。 - 关闭CGI模式:...

    Apache+php+mysql安装整合.pdf

    **问题解决**: - 如果遇到冲突或重装问题,可能需要清理旧的配置文件或注册表条目。 - 如果无法连接MySQL,检查端口设置、防火墙设置以及用户名和密码是否正确。 - 遇到乱码问题,检查数据库编码设置和应用程序的...

    在Windows7中安装Apache+PHP+MySQL.pdf

    在Windows 7操作系统中搭建一个完整的Web开发环境,通常包括安装Apache服务器、PHP解释器以及MySQL数据库。这个过程对于开发者来说至关重要,因为它提供了在本地进行网站开发和测试的平台。以下将详细介绍如何在...

    PHP+apache+mysql安装配置指南(XP测试通过)借鉴.pdf

    4. 设置MySQL的默认编码,推荐使用标准的latin1,如果需要与已有数据库兼容,应确保编码设置与原数据库一致,以防止乱码问题。 5. 设定MySQL作为Windows服务,并开启命令行模式下的执行文件权限。 6. 最后,设定超级...

    Apache+PHP+MySQL+phpMyAdmin配置教程[汇编].pdf

    - **字符集设置**:确保选择了gbk或相应的中文编码,以避免后续出现乱码问题。 - **全新安装与快速恢复的区别**:对于已经安装过MySQL的计算机,在重装系统后进行快速恢复时,不要尝试重新设置root密码,否则可能...

    web实验—银行系统(MySQL+Apache+php)

    放在Apache环境工作区内可以直接打开网页进行操作和功能查看。(压缩包内附带noSQL的完整数据库) 页面设计规范美观,严格按照设计标准。主体色调为蓝色。 (请用IE内核如360安全浏览器等打开,亲测谷歌的chrome内核...

    php+mysql+apache组合的一些问题

    总结来说,解决PHP与MySQL的中文乱码问题关键在于确保编码一致性,而处理Apache端口冲突则需要识别并调整占用端口的服务,或者更改Apache自身的端口设置。理解并掌握这些技巧,可以帮助开发者更顺畅地进行PHP、MySQL...

    Linux php出现中文乱码的解决方法.docx

    Linux PHP 中文乱码解决方法详解 Linux PHP 中文乱码问题是 PHP 开发中常见的问题之一。它是由于字符编码设置不当...解决 Linux PHP 中文乱码问题的方法有很多。我们可以根据实际情况选择合适的方法来解决这个问题。

    PHP+MYSQL使用UTF8中文乱码终极解决办法

    本篇文章将详细介绍如何彻底解决PHP+MySQL环境下中文乱码的问题。通过以下几个关键步骤,我们可以确保从前端到后端,整个系统都支持UTF-8编码,从而避免中文乱码的出现。 #### 步骤一:前端问题 **目标**:确保前端...

    php fck文件夹及上传图片中文乱码问题解决方法

    在PHP开发中,FCKeditor是一款非常流行的富文本编辑器,它允许用户在网页上方便地编辑和上传文本、...对于“工具”类问题,理解并掌握这些基本原理和技巧是非常重要的,这有助于在遇到类似问题时能快速定位并解决问题。

    PHP乱码终极版必杀.

    ### PHP乱码终极版必杀知识点详解 #### 一、HTML页面转UTF-8编码问题 **1. 在head后,title前加入元标签** - **知识点**: 确保文档头部正确声明了字符集。 - **解决方法**: 在`<head>`标签后、`<title>`标签前...

    php中文乱码解决方案

    除了以上常见的乱码问题及其解决方法外,还有一些特殊情况需要注意: ##### 1. 数据库编码为UTF8但页面编码为GB2312的情况 **解决方案**: - 在查询数据库前,先设置数据库连接的编码。例如,使用`mysql_query(...

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

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

    网页中文乱码完美解决方案.pdf

    本文档旨在解决网页中文乱码问题,提供了三个方面的解决方案:APACHE 服务器设置、PHP 编码问题和 MYSQL 数据库的表以及字段编码。 APACHE 服务器设置 APACHE 服务器的配置文件中有一行是编码的设置,默认的是 ...

    PHP WEB 开发乱码问题总结

    通过以上详细的介绍,我们可以看到解决PHP Web开发中乱码问题的关键在于确保每个环节都采用一致的编码格式(通常是UTF-8),并注意细节处理,避免因小失大。希望这篇文章能帮助大家在实际开发中有效避免和解决乱码...

    apache在mac上以及linux上安装存在的一些问题以及解决方法

    ### Apache在Mac与Linux平台上的安装及配置问题与解决方案 #### 概述 Apache作为一款广泛使用的Web服务器软件,在不同的操作系统环境下(如Mac与Linux)可能会遇到一系列的配置与使用问题。本文旨在针对Apache在...

    php5.2.1 MySQL5.0.37 apache2.2.4 phpmyadmin2.10.0.2 ZendOptimizer3.2.6安装与配置

    5. 设置MySQL的默认编码,推荐使用标准的latin1,若已有数据源,需确保编码一致,防止乱码问题。 6. 将MySQL设置为Windows服务以便管理和控制。 7. 创建超级用户并设置强密码,不建议创建匿名用户以保障安全性。 8. ...

Global site tag (gtag.js) - Google Analytics