高分求助:web开发时遇到的字符编码问题

xidianzhangjun 2010-07-06 11:54:44
各位大侠啊,小弟最近在做web编程时遇到了很多字符编码和中文乱码的问题,把我快整疯了!
我用的开发平台是windows+php5+apache+mysql
我现在有一个很头疼的问题,烦请高手给予解决。
我的PHP.ini配置文件中设置default_charset="GB2312"或"utf-8",我在写.html(或者.php)文件时,保存成某一种编码格式,比如utf-8,在文件的head里面加入<meta http-equiv="Content-Type" Content="text/html;charset=utf-8"/>或者<meta http-equiv="Content-Type" Content="text/html;charset=gb2312"/>
我的问题就是:这三个地方的设置到底是什么意义?这三个地方的设置有什么关系?这三个地方的设置彼此之间有什么影响?到底应该怎么设置才能彻底避免中文乱码问题?
这个问题困扰我好久了,弄得我心情很不好,烦请有理解的比较深的高手们给我详细地说一下,感激不尽!
...全文
86 点赞 收藏 9
写回复
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lukylfm 2010-07-07
学习了
回复
Junorz 2010-07-07
PHP.ini配置文件中设置default_charset="GB2312"或"utf-8",是设置网页的默认编码,就是在一个网页没有<meta>声明的时候应该把网页识别成什么编码。
而你在HEAD里设置<meta http-equiv="Content-Type" Content="text/html;charset=utf-8"/>就是告诉浏览器这个网页是UTF-8编码的。
回复
lclggdh 2010-07-07
php和apache里面设置的默认编码的作用是 php 程序没有指定 header("content-type:text/html; charst=utf-8");的时候所采用的编码。 这个编码声明是通过http协议的head部分发送的(用firebug可以看到)。 而html文件的头部的meta标签中声明的编码是浏览器下载了网页过后才解析的。
回复
kyzy_yy_pm 2010-07-06
后台页面和模板的保存编码要一样,数据库的最好也要一样(浏览器浏览时候的编码一一浏览的时候)
回复
fxs_2008 2010-07-06
一个原则:编码一致

文件本身编码:用你的编辑器看一下editplus右下角
响应编码:服务器默认编码(apache,php.ini),强制响应编码 header()-设定的编码,及meta的编码

优先级可能是:header>meta>服务器---这个是通知浏览器用什么编码打开

另,apache的编码,可能影响url解析。

数据库输出编码:和客户端的编码一致 数据库连接后set names 'utf8';数据库自动转码,而不管你实质存的是什么码。
回复
freedom_gooboy 2010-07-06
PHP.ini配置文件中设置default_charset="GB2312"或"utf-8" //这个是php设置时的系统默认的字符编码
我在写.html(或者.php)文件时,保存成某一种编码格式,比如utf-8//这个跟php.ini 中的设置没有什么影响

在文件的head里面加入<meta http-equiv="Content-Type" Content="text/html;charset=utf-8"/>或者<meta http-equiv="Content-Type" Content="text/html;charset=gb2312"/>//Content-Type(显示字符集的设定)设定页面使用的字符集,浏览器会根据此来调用相应的字符集显示页面的内容
这个要比文件编码一致 ,不然,浏览器查看时,会乱码

回复
CunningBoy 2010-07-06
PHP.ini中的default_charset设置是在PHP输出HTML页面是自动设置页面的charset,比如
PHP.ini中default_charset = UTF-8
<?php
echo "<HTML><Head></Head><body>你好</body><HTML>";
?>
这段输出的时候没有指定输出的charset,但是因为PHP.ini中有设置default_charset,所以它默认是UTF-8编码,浏览器会使用UTF-8来显示输出内容

<meta http-equiv="Content-Type" Content="text/html;charset=gb2312"/>
是指定输出给浏览器的HTML页面编码就是GB2312,浏览器会使用GB2312来显示HTML页面,这个设定会覆盖PHP.ini中的default_charset设置

你的文件保存的编码只是文件存放的形式,并不是浏览器显示的最终结果,但是如果你把含有中文的编码保存为ASCII,因为中文信息没有正确保存在文件中,所有浏览器也就显示不出来。推荐你保存文件是UTF8编码,那么在default_charset或者<meta charset>也设置为UTF8编码,这样保存和显示始终一直。
回复
yukon12345 2010-07-06
知其然也要知其所以然。
http://hi.baidu.com/yukon_kanzaki/blog/item/28cdd0544b73f055d009065c.html
回复
发动态
发帖子
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
社区公告
暂无公告