php 各种应用乱码问题的解决方法


Posted in PHP onMay 09, 2010

1) 使用 标签设置页面编码

这个标签的作用是声明客户端的浏览器用什么字符集编码显示该页面,xxx 可以为 GB2312、GBK、UTF-8(和 MySQL 不同,MySQL 是 UTF8)等等。因此,大部分页面可以采用这种方式来告诉浏览器显示这个页面的时候采用什么编码,这样才不会造成编码错误而产生乱码。但是有的时候我们会发现有了这句还是不行,不管 xxx 是哪一种,浏览器采用的始终都是一种编码,这个情况我后面会谈到。

请注意, 是属于 HTML 信息的,仅仅是一个声明,仅表明服务器已经把 HTML 信息传到了浏览器。

2) header("content-type:text/html; charset=xxx");

这个函数 header() 的作用是把括号里面的信息发到 http 标头。如果括号里面的内容为文中所说那样,那作用和 标签基本相同,大家对照第一个看发现字符都差不多的。但是不同的是如果有这段函数,浏览器就会永远采用你所要求的 xxx 编码,绝对不会不听话,因此这个函数是很有用的。为什么会这样呢?那就得说说 http 标头和 HTML信息的差别了:

http 标头是服务器以 http 协议传送 HTML 信息到浏览器前所送出的字串。而 标签是属于 HTML 信息的,所以 header() 发送的内容先到达浏览器,通俗点就是 header() 的优先级高于 (不知道可不可以这样讲)。假如一个 php 页面既有header("content-type:text/html;charset=xxx"),又有,浏览器就只认前者 http 标头而不认 meta 了。当然这个函数只能在 php 页面内使用。

同样也留有一个问题,为什么前者就绝对起作用,而后者有时候就不行呢?这就是接下来要谈的Apache 的原因了。

3) AddDefaultCharset

Apache 根目录的 conf 文件夹里,有整个 Apache 的配置文档 httpd.conf。

用文本编辑器打开 httpd.conf,第 708 行(不同版本可能不同)有 AddDefaultCharset xxx,xxx为编码名称。这行代码的意思:设置整个服务器内的网页文件 http 标头里的字符集为你默认的 xxx字符集。有这行,就相当于给每个文件都加了一行 header("content-type:text/html; charset=xxx")。这下就明白为什么明明 设置了是 utf-8,可浏览器始终采用 gb2312 的原因。

如果网页里有 header("content-type:text/html; charset=xxx"),就把默认的字符集改为你设置的字符集,所以这个函数永远有用。如果把 AddDefaultCharset xxx 前面加个"#",注释掉这句,而且页面里不含 header("content-type…"),那这个时候就轮到 meta 标签起作用了。

下面列出以上的优先顺序:

.. header("content-type:text/html; charset=xxx")

.. AddDefaultCharset xxx

..

如果你是 web 程序员,建议给你的每个页面都加个header("content-type:text/html;charset=xxx"),这样就可以保证它在任何服务器都能正确显示,可移植性也比较强。

4) php.ini 中的 default_charset 配置:

php.ini 中的 default_charset = "gb2312" 定义了 php 的默认语言字符集。一般推荐注释掉此行,让浏览器根据网页头中的 charset 来自动选择语言而非做一个强制性的规定,这样就可以在同台服务器上提供多种语言的网页服务。

PHP截取汉字乱码问题解决方法mb_substr函数的应用
mysql 中文乱码解决方法集锦

PHP 相关文章推荐
Discuz 模板引擎的封装类代码
Jul 18 PHP
PHP 常用函数库和一些实用小技巧
Jan 01 PHP
php 智能404跳转代码,适合换域名没改变目录的网站
Jun 04 PHP
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
Jul 09 PHP
php下目前为目最全的CURL中文说明
Aug 01 PHP
php网上商城购物车设计代码分享
Feb 15 PHP
PHP的变量类型和作用域详解
Mar 12 PHP
php中HTTP_REFERER函数用法实例
Nov 21 PHP
php天翼开放平台短信发送接口实现方法
Dec 22 PHP
php语言中使用json的技巧及json的实现代码详解
Oct 27 PHP
让whoops帮我们告别ThinkPHP6的异常页面
Mar 02 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
Aug 24 PHP
php 输出双引号"与单引号'的方法
May 09 #PHP
php for 循环语句使用方法详细说明
May 09 #PHP
php 函数使用方法与函数定义方法
May 09 #PHP
php 获取select下拉列表框的值
May 08 #PHP
PHP foreach循环使用详解与实例代码
May 08 #PHP
php 在文件指定行插入数据的代码
May 08 #PHP
php将数据库导出成excel的方法
May 07 #PHP
You might like
解决文件名解压后乱码的问题 将文件名进行转码的代码
2012/01/10 PHP
JSON两种结构之对象和数组的理解
2016/07/19 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
2017/05/11 PHP
如何设置iframe高度自适应在跨域情况下的可用方法
2013/09/06 Javascript
得到form下的所有的input的js代码
2013/11/07 Javascript
自己动手实现jQuery Callbacks完整功能代码详解
2013/11/25 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
2016/05/21 Javascript
微信小程序 form组件详解及简单实例
2017/01/10 Javascript
vue-cli2打包前和打包后的css前缀不一致的问题解决
2018/08/24 Javascript
layui table复选框禁止某几条勾选的实例
2019/09/20 Javascript
Vue如何基于vue-i18n实现多国语言兼容
2020/07/17 Javascript
通过实例解析JavaScript常用排序算法
2020/09/02 Javascript
[33:19]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第一场 11.26
2020/11/30 DOTA
Python模仿POST提交HTTP数据及使用Cookie值的方法
2014/11/10 Python
Python中多线程及程序锁浅析
2015/01/21 Python
编写Python CGI脚本的教程
2015/06/29 Python
python如何求解两数的最大公约数
2018/09/27 Python
对Python多线程读写文件加锁的实例详解
2019/01/14 Python
Python3多线程版TCP端口扫描器
2019/08/31 Python
python中68个内置函数的总结与介绍
2020/02/24 Python
Python MOCK SERVER moco模拟接口测试过程解析
2020/04/13 Python
浅析NumPy 切片和索引
2020/09/02 Python
HTML5实现表单自动验证功能实例代码
2017/01/11 HTML / CSS
html5的canvas方法使用指南
2014/12/15 HTML / CSS
使用HTML5的Canvas绘制曲线的简单方法
2015/09/08 HTML / CSS
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
《猫》教学反思
2014/02/26 职场文书
《三袋麦子》教学反思
2014/03/02 职场文书
2014年五一劳动节社区活动总结
2014/04/14 职场文书
医德考评自我评价
2014/09/14 职场文书
银行先进个人总结
2015/02/15 职场文书
付款证明格式范文
2015/06/19 职场文书
保护环境的宣传语
2015/07/13 职场文书
python 使用tkinter与messagebox写界面和弹窗
2022/03/20 Python
python中filter,map,reduce的作用
2022/06/10 Python
详解SQL报错盲注
2022/07/23 SQL Server