<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>https://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>https://jackxiang.com/post//</link>
<title><![CDATA[apache+php 字符编码问题解决和php的：header(content-type:text/html; charset=utf-8);]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Wed, 23 Sep 2009 12:16:12 +0000</pubDate> 
<guid>https://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	如果你在网上搜索 “apache配置”，搜到的页面大多都会建议你在httpd.conf中加上这么一句：AddDefaultCharset GB2312。对于新手而且是只用GB2312编码的开发人来说，这么做是ok的。<br/>静态：<br/><textarea name="code" class="php" rows="15" cols="100">
&lt;!doctype html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;title&gt;会务系统首页&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
这是会议管理系统首页：
&lt;br&gt;
扫码找座：&lt;a href=&quot;./zhaozuo/index.html&quot;&gt;扫码找座&lt;/a&gt;
&lt;br&gt;
嘉宾注册：敬请期待。
&lt;/body&gt;
&lt;/html&gt;
</textarea><br/><br/>但是如果要想使用UTF-8字符集的话，比如 在test.php文件中需要有<br/>meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ 这段代码。这时你再打开浏览器访问test.php页面的话，你看到的是正确的页面。但是如果实际上浏览器还是以GB2312编码解释从服务器返回的response，为什么呢？原因是浏览器是根据http应答消息头部中的 Content-type: text/html; charset=GB2312 来决定使用何种编码解释应答，也就是说apache服务器仍然用GB2312编码传递数据。<br/><br/>所以说如果apache的默认字符集被设置成了GB2312，即使在页面中声明使用UTF-8编码，apache服务器还是会按照GB2312编码来传送http response。<br/><br/>没 关系，我们把AddDefaultCharset GB2312 改成 AddDefaultCharset UTF-8，看看什么结果？如果你看到乱码恭喜你，你还知道是乱码问题；如果你看到是空白页面，那么你就惨了，你可能会以为这是其他什么原因造成的，而不 会从编码的角度去考虑怎么解决问题。这是为什么？<br/><br/>原因在于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编码来解释应答消息。<br/><br/>由 于UTF-8为3个字节表示一个汉子，而普通的GB2312或BIG5是两个。页面输出时，由于上述原因，出现半个汉字的情况，这时该半个汉字会和的 &gt;结合成一个乱码字，导致IE无法读完的话，会发现实际上整个叶面全部已经输出了。如果使用的是Mozilla、Mozilla Firefox、Sarafi的浏览器这不会造成这个问题，而是一堆乱码。这是由于Firefox浏览器和IE解析网页编码的策略不同产生的。<br/><br/>OK,我们把test.php以UTF-8保存，再用浏览器访问时，就没有问题了。可这样做，会使得apache目录下的所有web应用只能用同一种编码。如何搞定？<br/><br/>解决办法：<br/><br/>首先，可以使用AddDefaultCharset off来 关闭默认文件编码，这样apache服务器就不会在http应答消息头部设置charset，只是设置Content-type: text/html. 而浏览器就会依靠html文件中设置的harset来决定编码。其次，脚本php.ini文件中的default_charset = “UTF-8″作用同httpd.conf文件，把该行注释掉，使php自动识别文件的编码方式。<br/><br/>这样不论你用什么编码方式，只要test.php中的<br/>meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ 与你test.php文件编码方式相同，就不会产生乱码问题。<br/><br/>用户提交数据的编码<br/><br/>浏 览器提交的字符编码由客户端的characher encoding决定。例如，当前浏览器的编码是Gb2312，用户提交数据后，无论apache设置的编码方式是GB2312还是UTF-8，这时在服 务器端接收到的仍是以Gb2312编码的数据。如果要在返回页面上显示用户刚才提交的数据，而该页面是用UTF-8编码，或者要在数据库中存储的用户提交 的数据，而数据库是UTF-8编码的，那就要做字符转换了。 <br/><br/>
]]>
</description>
</item><item>
<link>https://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] apache+php 字符编码问题解决和php的：header(content-type:text/html; charset=utf-8);]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>