家园首页 Php4手册 我的相册 家园下载 个人文集 给我留言
我形我塑,网络相册,www.5x54.com 相册 相册 心情相册,少女相册 免费申请,我形我塑免费相册
 家园 个人文集   http://www.5x54.com
 


apache+php 字符编码问题解决


作者:网上收集    点击: 1341

如果你在网上搜索 “apache配置”版权保护,请不要随意复制^%#$32239)98sa。^_^,搜到的页面大多都会建议你在httpd.conf中加上这么一句:AddDefaultCharset GB2312。对于新手而且是只用GB2312编码的开发人来说版权保护,请不要随意复制^%#$32239)98sa。^_^,这么做是ok的。 版权保护版权保护,请不要随意复制^%#$32239)98sa。^_^,请不要随意复制^%#$32239)98sa。^_^
版权保护版权保护,请不要随意复制^%#$32239)98sa。^_^,请不要随意复制^%#$32239)98sa。^_^
但是如果要想使用UTF-8字符集的话版权保护,请不要随意复制^%#$32239)98sa。^_^,比如 在test.php文件中需要有  版权保护版权保护,请不要随意复制^%#$32239)98sa。^_^,请不要随意复制^%#$32239)98sa。^_^
meta http-equiv="Content-Type" content="text/html; charset=UTF-8" 这段代码。这时你再打开浏览器访问test.php页面的话版权保护,请不要随意复制^%#$32239)98sa。^_^,你看到的是正确的页面。但是如果实际上浏览器还是以GB2312编码解释从服务器返回的response版权保护,请不要随意复制^%#$32239)98sa。^_^,为什么呢?原因是浏览器是根据http应答消息头部中的 Content-type: text/html; charset=GB2312 来决定使用何种编码解释应答版权保护,请不要随意复制^%#$32239)98sa。^_^,也就是说apache服务器仍然用GB2312编码传递数据。 版权保护版权保护,请不要随意复制^%#$32239)98sa。^_^,请不要随意复制^%#$32239)98sa。^_^
版权保护版权保护,请不要随意复制^%#$32239)98sa。^_^,请不要随意复制^%#$32239)98sa。^_^
所以说如果apache的默认字符集被设置成了GB2312版权保护,请不要随意复制^%#$32239)98sa。^_^,即使在页面中声明使用UTF-8编码版权保护,请不要随意复制^%#$32239)98sa。^_^,apache服务器还是会按照GB2312编码来传送http response。 版权保护版权保护,请不要随意复制^%#$32239)98sa。^_^,请不要随意复制^%#$32239)98sa。^_^
版权保护版权保护,请不要随意复制^%#$32239)98sa。^_^,请不要随意复制^%#$32239)98sa。^_^
没关系版权保护,请不要随意复制^%#$32239)98sa。^_^,我们把AddDefaultCharset GB2312 改成 AddDefaultCharset UTF-8版权保护,请不要随意复制^%#$32239)98sa。^_^,看看什么结果?如果你看到乱码恭喜你版权保护,请不要随意复制^%#$32239)98sa。^_^,你还知道是乱码问题;如果你看到是空白页面版权保护,请不要随意复制^%#$32239)98sa。^_^,那么你就惨了版权保护,请不要随意复制^%#$32239)98sa。^_^,你可能会以为这是其他什么原因造成的版权保护,请不要随意复制^%#$32239)98sa。^_^,而不会从编码的角度去考虑怎么解决问题。这是为什么? 版权保护版权保护,请不要随意复制^%#$32239)98sa。^_^,请不要随意复制^%#$32239)98sa。^_^
版权保护版权保护,请不要随意复制^%#$32239)98sa。^_^,请不要随意复制^%#$32239)98sa。^_^
原因在于php文件本身是用系统字符集来编码的版权保护,请不要随意复制^%#$32239)98sa。^_^,中文的windows XP都是用GB2312版权保护,请不要随意复制^%#$32239)98sa。^_^,每一个文件头部都有字段指示该文件是用何种方式编码的。当apache接到浏览器的请求后版权保护,请不要随意复制^%#$32239)98sa。^_^,会让php去解释所请求的页面版权保护,请不要随意复制^%#$32239)98sa。^_^,比如 test.php。php会识别出test.php的编码方式是GB2312后(就像我们用javac编译java源文件时版权保护,请不要随意复制^%#$32239)98sa。^_^,编译器默认用系统编码读源文件里的内容。如果源文件不是用系统编码来保存的版权保护,请不要随意复制^%#$32239)98sa。^_^,可以用命令javac -encoding指定具体的编码)版权保护,请不要随意复制^%#$32239)98sa。^_^,把数据以GB2312的编码格式传递给apache版权保护,请不要随意复制^%#$32239)98sa。^_^,而apache服务器不会改变从php传来的数据版权保护,请不要随意复制^%#$32239)98sa。^_^,只是在应答消息头部中把字符集设置成UTF-8: Content-type: text/html; charset=UTF-8. 也就是说你传递的是GB2312编码的数据版权保护,请不要随意复制^%#$32239)98sa。^_^,而浏览器却以UTF-8编码来解释应答消息。 版权保护版权保护,请不要随意复制^%#$32239)98sa。^_^,请不要随意复制^%#$32239)98sa。^_^
版权保护版权保护,请不要随意复制^%#$32239)98sa。^_^,请不要随意复制^%#$32239)98sa。^_^
由于UTF-8为3个字节表示一个汉子版权保护,请不要随意复制^%#$32239)98sa。^_^,而普通的GB2312或BIG5是两个。页面输出时版权保护,请不要随意复制^%#$32239)98sa。^_^,由于上述原因版权保护,请不要随意复制^%#$32239)98sa。^_^,出现半个汉字的情况版权保护,请不要随意复制^%#$32239)98sa。^_^,这时该半个汉字会和的>结合成一个乱码字版权保护,请不要随意复制^%#$32239)98sa。^_^,导致IE无法读完的话版权保护,请不要随意复制^%#$32239)98sa。^_^,会发现实际上整个叶面全部已经输出了。如果使用的是Mozilla、Mozilla Firefox、Sarafi的浏览器这不会造成这个问题版权保护,请不要随意复制^%#$32239)98sa。^_^,而是一堆乱码。这是由于Firefox浏览器和IE解析网页编码的策略不同产生的。 版权保护版权保护,请不要随意复制^%#$32239)98sa。^_^,请不要随意复制^%#$32239)98sa。^_^
版权保护版权保护,请不要随意复制^%#$32239)98sa。^_^,请不要随意复制^%#$32239)98sa。^_^
OK,我们把test.php以UTF-8保存版权保护,请不要随意复制^%#$32239)98sa。^_^,再用浏览器访问时版权保护,请不要随意复制^%#$32239)98sa。^_^,就没有问题了。可这样做版权保护,请不要随意复制^%#$32239)98sa。^_^,会使得apache目录下的所有web应用只能用同一种编码。如何搞定? 版权保护版权保护,请不要随意复制^%#$32239)98sa。^_^,请不要随意复制^%#$32239)98sa。^_^
版权保护版权保护,请不要随意复制^%#$32239)98sa。^_^,请不要随意复制^%#$32239)98sa。^_^
解决办法: 版权保护版权保护,请不要随意复制^%#$32239)98sa。^_^,请不要随意复制^%#$32239)98sa。^_^
版权保护版权保护,请不要随意复制^%#$32239)98sa。^_^,请不要随意复制^%#$32239)98sa。^_^
首先版权保护,请不要随意复制^%#$32239)98sa。^_^,可以使用AddDefaultCharset off来关闭默认文件编码版权保护,请不要随意复制^%#$32239)98sa。^_^,这样apache服务器就不会在http应答消息头部设置charset版权保护,请不要随意复制^%#$32239)98sa。^_^,只是设置Content-type: text/html. 而浏览器就会依靠html文件中设置的harset来决定编码。其次版权保护,请不要随意复制^%#$32239)98sa。^_^,脚本php.ini文件中的default_charset = “UTF-8″作用同httpd.conf文件版权保护,请不要随意复制^%#$32239)98sa。^_^,把该行注释掉版权保护,请不要随意复制^%#$32239)98sa。^_^,使php自动识别文件的编码方式。 版权保护版权保护,请不要随意复制^%#$32239)98sa。^_^,请不要随意复制^%#$32239)98sa。^_^
版权保护版权保护,请不要随意复制^%#$32239)98sa。^_^,请不要随意复制^%#$32239)98sa。^_^
这样不论你用什么编码方式版权保护,请不要随意复制^%#$32239)98sa。^_^,只要test.php中的 版权保护版权保护,请不要随意复制^%#$32239)98sa。^_^,请不要随意复制^%#$32239)98sa。^_^
meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ 与你test.php文件编码方式相同版权保护,请不要随意复制^%#$32239)98sa。^_^,就不会产生乱码问题。 版权保护版权保护,请不要随意复制^%#$32239)98sa。^_^,请不要随意复制^%#$32239)98sa。^_^
版权保护版权保护,请不要随意复制^%#$32239)98sa。^_^,请不要随意复制^%#$32239)98sa。^_^
用户提交数据的编码 版权保护版权保护,请不要随意复制^%#$32239)98sa。^_^,请不要随意复制^%#$32239)98sa。^_^
版权保护版权保护,请不要随意复制^%#$32239)98sa。^_^,请不要随意复制^%#$32239)98sa。^_^
浏览器提交的字符编码由客户端的characher encoding决定。例如版权保护,请不要随意复制^%#$32239)98sa。^_^,当前浏览器的编码是Gb2312版权保护,请不要随意复制^%#$32239)98sa。^_^,用户提交数据后版权保护,请不要随意复制^%#$32239)98sa。^_^,无论apache设置的编码方式是GB2312还是UTF-8版权保护,请不要随意复制^%#$32239)98sa。^_^,这时在服务器端接收到的仍是以Gb2312编码的数据。如果要在返回页面上显示用户刚才提交的数据版权保护,请不要随意复制^%#$32239)98sa。^_^,而该页面是用UTF-8编码的版权保护,请不要随意复制^%#$32239)98sa。^_^,或者要在数据库中存储的用户提交的数据版权保护,请不要随意复制^%#$32239)98sa。^_^,而数据库是UTF-8编码的版权保护,请不要随意复制^%#$32239)98sa。^_^,那就要做字符转换了。

收藏此文章     打印  更新     编辑此文章    『关闭窗口』