`
haohao-xuexi02
  • 浏览: 210521 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

php 乱码问题 未解决

    博客分类:
  • 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编码的,那就要做字符转换了。

 原文:http://hi.baidu.com/annpih/blog/item/c70ac438d6e693c7d5622585.html

 

续:1.修改apache-config配置中已修改

 #AddDefaultCharset ISO-8859-1
 AddDefaultCharset off

 2. php.ini 中的default_charset = “UTF-8″ 已修改。

但是编码还是乱的。问题还是未解决。

 

分享到:
评论

相关推荐

    Mysql中文乱码问题解决方案

    如果未指定,需要手动修改,以避免出现中文乱码问题。同时,检查数据插入语句,确保数据的编码与存储的字符集相匹配。 通过以上步骤,应该能够解决大部分MySQL中文乱码问题。但要注意,每个环节的字符集配置都需...

    php中文乱码解决办法

    以下是一些关于如何解决PHP中文乱码问题的详细方法: 首先,我们需要理解编码的基本概念。编码决定了字符集的表示方式,如GBK(GB2312的扩展)和UTF-8是最常见的中文编码格式。GBK主要在中国大陆使用,而UTF-8是一...

    ajax乱码解决方案

    总的来说,解决Ajax乱码问题的关键在于理解字符编码的工作原理,确保数据在整个传输过程中的编码与解码一致性,以及正确设置服务器和客户端的编码设置。在实际应用中,还应考虑跨平台和跨浏览器的兼容性,以确保解决...

    apache+mysql+php 乱码问题.docx

    以下是一份详细解决Apache+MySQL+PHP乱码问题的指南: 1. **Apache配置**: 在`httpd.conf`文件中,你需要确保Apache发送正确的字符集信息给浏览器。可以通过设置`AddDefaultCharset`来实现。将`AddDefaultCharset...

    Phplive.3.2.2.NULLED-CHT(汉化版--未解决乱码问题)

    Phplive.3.2.2.NULLED-CHT(汉化版--未解决乱码问题) 已经剩下客服服务那个模块没汉化了,也不在汉化了,,贴出来和大家共享,,,, 由于花了点精力和时间,, 所以将资源分设为10,还希望大家不要介意....

    MySQL存数据时乱码解决

    下面我们将详细探讨如何解决MySQL中的乱码问题。 首先,我们需要理解MySQL中与字符集相关的几个关键变量: 1. `character_set_server`: 这是服务器安装时指定的默认字符集设定。它决定了MySQL服务器的基本字符集...

    解决Python3 被PHP程序调用执行返回乱码的问题

    本文将深入探讨如何解决在PHP调用Python脚本时遇到的乱码问题。这个问题涉及到字符编码、命令行参数传递以及不同编程语言之间的数据交换。 首先,我们要理解Python3和PHP对字符编码的处理方式。Python3默认使用UTF-...

    Vtiger-5.2.1-PDF订单及报表中文乱码问题完美修正包

    8. **测试与验证**:修复后,应全面测试系统,包括创建和查看包含中文的PDF订单和报表,以确保问题已彻底解决,且未引入新的问题。 总之,这个修正包旨在解决Vtiger 5.2.1版本中与中文显示相关的PDF乱码问题,通过...

    Vtiger-5.2.1-导出数据文件Excel及CSV中文乱码问题完美修正包

    在解决Vtiger 5.2.1的中文乱码问题时,除了上述技术性步骤,还需要了解不同的操作系统和应用软件对编码的支持情况,因为它们可能影响到数据的正确读取和显示。对于非技术背景的用户,建议寻求专业开发人员的帮助,以...

    PHP+MySQL存储数据常见中文乱码问题小结

    通过以上措施,大部分PHP+MySQL的中文乱码问题可以得到解决。然而,对于复杂的应用场景,还需要注意其他潜在的编码问题,例如文件上传、邮件发送等涉及编码转换的环节。总的来说,一致性是解决乱码问题的关键,无论...

    php PDO中文乱码解决办法

    以下是对PHP PDO中文乱码问题的详细分析和解决方法: 1. **问题分析** - **字符编码基础**:中文字符通常采用UTF-8编码,这是一种广泛支持的多字节编码方式,能够表示世界上大部分语言的字符。 - **数据库设置**...

    drupal6上传中文文件名附件乱码问题解决方法

    总的来说,解决 Drupal 6 上传中文文件名附件乱码问题需要对 Drupal 的文件处理机制有深入理解,特别是文件名的存储和编码转换。通过上述方法,您可以确保中文文件名在 Drupal 系统中得到正确处理,从而提升用户体验...

    解决Iphone IPAD 转发或回复Outlook客户邮件出现乱码的方案,超详细全面图文教程

    然后,我们可以尝试发送一封邮件,以查看是否解决了乱码的问题。 方法二:修改签名字体 在 iPhone/iPad 上,我们可以通过修改签名字体来解决乱码的问题。具体步骤如下: 1. 打开“邮件、通讯录、日历”应用程序 2...

    解析关于java,php以及html的所有文件编码与乱码的处理方法汇总

    例如,当你打开一个名为`a.php`的文件,如果浏览器显示的文本出现乱码,可能是因为网页的字符编码未被正确设置。解决这个问题,可以在文件顶部添加以下PHP语句: ```php header("Content-Type:text/html;charset=...

    帝国CMS自动截取简介出现乱码的解决方法

    然而,在实际使用过程中,用户可能会遇到一些技术问题,比如本文标题所提到的“帝国CMS自动截取简介出现乱码的解决方法”。这个问题通常发生在尝试自动截取文章简介时,系统返回的结果包含了错误的字符编码,导致...

    ThinkPHP打开验证码页面显示乱码的解决方法

    总的来说,ThinkPHP验证码页面出现乱码主要是由于文件编码问题,通过检查并移除BOM头可以有效地解决这一问题。在实际开发中,理解文件编码原理以及如何处理编码问题是非常重要的,这不仅可以提升开发效率,也能保证...

    PHP页面中文乱码分析

    PHP页面中文乱码出现的原因有几种,一种是页面编码不统计一,二是数据库未设置编码,三是apache编码有问题,下面我来给大家介绍两种解决办法,总体来讲就是页面编码不统一了。出现乱码大部分是由于编码方式的不一致...

    PHP动态网站开发任务-PHP语法基础.pptx

    在PHP中,需要设置编码类型,以解决汉字乱码问题,可以使用header("Content-Type: text/html;charset=utf8");设置编码类型为utf8。 PHP标记有多种形式,包括<?php……?>、……?>、“php”>…、等,但是在PHP7中,...

    moodle常见问题与解决方法

    二、解决日历乱码问题 当遇到 Moodle 日历显示乱码时,通常可以通过更新或修改 langconfig.php 文件来解决。你可以从网上或群组共享资源中找到已修复的文件进行替换。 三、PHP 中扩展 PHP_CURL.DLL 的安装 在 PHP ...

    http500内部服务器错误的解决方法,这才真正能解决问题

    7. **联系服务提供商**:如果以上步骤都不能解决问题,可能需要联系你的Web托管服务提供商寻求帮助,他们可能能够提供更专业的技术支持。 在“http500内部服务器错误的解决方法.txt”文件中,可能会包含更具体的...

Global site tag (gtag.js) - Google Analytics