字符集问题,是web开发中一个常见的和比较令人头痛的问题,以下是个人的解决办法经验总结:
一、常见症状:
1、乱码:各种各样的乱码,都可归为字符集头;
2、空白页:有时页面也会输出空白,可以是PHP输出的时候,也可能是其他时候;总之,如果页面输出空白,而你又找不到错误,这说明很可能也是字符集的问题!
3、网页结构发生异动。
二、web开发中各字符集(或编码的)的类型
1、系统编码: win系统的内码是unicode,实际上是二字节编码,但可以转成不同编码!如果不转码,有些文件在其他系统中就会出错,比如:word,excel处理时,如果是中文,要处理成utf-8,要转码!或者将utf-8(或其他编码)转成gb2312!
linux系统,内置是utf-8的编码!
如果不深究,要注意的就是处理office文档时,要转成gb2312!
2、文件本身编码
这也是个容易忽视的问题,editplus可以自动查看文件的编码!另外,php也有函数可以看文件的内码!
这里要说明的事,网页文件可能有meta指定编码,这个要各文件本身的编码也要一致,否则会乱码!
核心提示:一个文件里不能有两种编码数据,否则必有一乱码!
3、网页的指定浏览器所用编码
这个在web中很常见,这个原理应这么理解,即服务器返回网页时,提示浏览器用什么编码打开网页!
核心:优先级
如果apache指定了编码(如utf-8),则默认这个编码,浏览器会用这个编码打开!
如果apache没指定,用php.ini指定的编码!
如果meta指定,则用meta指定的编码!、
如果header指定,则用header指定的编码,
优先级上,如果上一层没有指定,自动用下一层的编码!
如果都有指定,优先级问题,我没测试过,我理解应是一下层的优先,header优先meta!
如果都没有指定,则会看BOM!IE会根据BOM识别!没有BOM的,IE会用原来的设置打开!
4、数据库中数据和编码
这个也很复杂,不多说了,看MYSQL手册字符集一章!
最简单的是用set names '编码(如gbk)'指定,PHP高版本5.2以上另有新函数!
这个的意思是说,页面的编是'gbk',它通知mysql,客户端发送和返回数据是要求是gbk,而不管后到数据到底用什么保存,mysql会自动转换!
它保证了,数据库存取时,和web页面指定的编码一致!
好了,总结一下:
第一点:数据库出来的编码要和页面Meta编码及页面本身编码一致!
第二点:页面本身编码要和浏览器的显示编码一致,浏览器根据header,meta,服务器返回头信息来选择编码;这个如果选择正确的编码,还是能正确显示的!
第三点:一种文件不能有两种编码数据,否则必有一乱码!这个无论选择何种显示编码,都有乱码!
(转载请注明本来源)
本文永久链接:
http://www.zzxj.net/blog/fxs_2008/archive/2009/09/20/58.html
发表于 @
2009年09月20日 |评论(loading...
)|收藏