<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.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>http://www.jackxiang.com/post//</link>
<title><![CDATA[PHP环境下utf8乱码的解决方法---apache，php配置问题]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Fri, 11 Jun 2010 14:28:28 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	参考：http://www.jackxiang.com/post/3170/<br/>除了网上流传的环境配置以外，<br/>在PHP程序中加上 ini_set(&#039;default_charset&#039;,&#039;utf-8&#039;);<br/>将包含unicode码的文件统一转换成utf8格式，这里需要注意的是editplus保存的utf8文件不带BOM头，<br/>这在大多数情况下不会有什么问题，而在模板输出时会有乱码现象，除了检查模板文件中utf8的标记之外，利用editplus来保存模板时没有BOM头也是一个原因，原因在于模板解析时，PHP读取文件时，没有检查到BOM头，会把该文件当成ansi格式处理，这样最终向浏览器输出的HTML就成了乱码。<br/>另一篇文章：<br/>我的页面代码如下<br/><br/>[Copy to clipboard] [ - ]CODE:&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;&lt;htmlxmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;<br/>&lt;html&gt;<br/>&lt;head&gt;<br/>&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;<br/>&lt;title&gt;&lt;/title&gt;<br/>&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&nbsp;&nbsp;href=http://bbs.chinaunix.net/&quot;script/css.css&quot; /&gt;<br/>&lt;script type=&quot;text/javascript&quot; src=http://bbs.chinaunix.net/&quot;script/menu.js&quot;&gt;&lt;/script&gt;<br/>&lt;/head&gt;<br/>&lt;body class=&quot;leftbgcolor&quot;&gt;<br/>&lt;div&gt;&lt;imgsrc=http://bbs.chinaunix.net/&quot;image/gl.gif&quot; border=&quot;0&quot;/&gt;&amp;#44288;&amp;#47532;&amp;#49468;&amp;#53552;&lt;/div&gt;<br/>编码选择utf-8，但是打开时ie自动选择的却是gb2312出现乱码，在DW里我选取择&quot;包括Unicode签名(BOM)&quot;后，ie自动选择utf8就不会出现乱码,我不想使用BOM，因为使用BOM后，session又会提示警告。大家说应该怎么办呢?<br/>先去除 BOM。然后再加入：<br/><br/>[Copy to clipboard] [ - ]CODE:header(&#039;Content-Type: text/html; charset=UTF-8&#039;); <br/>即可。<br/><br/>httpd.conf <br/><br/>AddDefaultCharset&nbsp;&nbsp; GB2312 <br/><br/>PHP.INI <br/><br/>default_charset&nbsp;&nbsp; =&nbsp;&nbsp; &quot;gb2312 &quot;<br/><br/>--------------------------------------------------------------------------------------------------------------------------------------------------------------------<br/><br/>如果你在网上搜索 “apache配置”，搜到的页面大多都会建议你在httpd.conf中加上这么一句：AddDefaultCharset GB2312。对于新手而且是只用GB2312编码的开发人来说，这么做是ok的。<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/>
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] PHP环境下utf8乱码的解决方法---apache，php配置问题]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>