<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Dominic.Xu&#039;s 博客 &#187; 编码</title>
	<atom:link href="http://xuplus.com/article/tag/%e7%bc%96%e7%a0%81/feed" rel="self" type="application/rss+xml" />
	<link>http://xuplus.com</link>
	<description>Web 2.0 生活</description>
	<lastBuildDate>Wed, 24 Aug 2011 05:26:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>PHP中xajax库中文问题及提示返回XML文件无效的解决办法</title>
		<link>http://xuplus.com/article/2007/06/a37.html</link>
		<comments>http://xuplus.com/article/2007/06/a37.html#comments</comments>
		<pubDate>Mon, 25 Jun 2007 06:31:26 +0000</pubDate>
		<dc:creator>Dominic</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[xajax]]></category>
		<category><![CDATA[中文]]></category>
		<category><![CDATA[编码]]></category>

		<guid isPermaLink="false">http://xuplus.com/?p=37</guid>
		<description><![CDATA[xajax是PHP下一个非常好的ajax框架，虽然xajax自己说自己是一个库(Library)，但是我觉得它更像一个框架（Framework）。xajax是一个开源的 PHP 类库 它能够让你黏合HTML、CSS、Javascript和PHP，并可以结合Smarty模板系统使用。 在运用Xoops的Page模组的时候，发现其不能和中文正常工作，特别是不能和UTF-8编码的页面一起工作，昨天在利用这个实现DataGrid的时候发现完全不能正常工作了，一直报“the XML response that was returned from the server is invalid”这个错误，Google了一下，发现不少人也有这个问题。结合之前解决Xoops的Page模组（感谢文明猪）的UTF-8使用问题的方法，终于发现了完美解决xajax库使用中文的方法。 如果页面采用GB2312或GBK作为编码或字符集，一般网络上面提到的方法可以解决：需要注意的是common.php、server.php及server.php用到的php文件（特别是生成数据的文件）全部不要使用UTF-8编码格式保存而使用ASCII格式保存。同时server.php输出的数据内容最好也采用gb2312编码。 在common.php前面定义 define(&#8216;XAJAX_DEFAULT_CHAR_ENCODING&#8217;,'GB2312&#8242;); 再在调用时使用： $xajax = new xajax(); $xajax-&#62;decodeUTF8InputOn(); 或者 $xajax = new xajax(&#8216;gb2312&#8242;); $xajax-&#62;setCharEncoding(); $xajax-&#62;decodeUTF8InputOn(); $objResponse = new xajaxResponse(&#8216;gb2312&#8242;); 如果页面采用UTF-8字符集的话，网上一些人说使用UTF-8格式编码就可以了，实际上即使全部使用UTF-8编码也不能正常工作，还是会报错：“the XML response that was returned from the server is invalid”。联想到之前在IE下碰到UTF-8 BOM Bug（文章：IE下页面无端端空出一行及utf8页面无法显示的解决方法 ），会不会这个地方服务器传回的XML文件中也包含多个UTF-8 BOM内容呢？通过ethereal截获数据包发现，服务器返回的内容中还真是包含了多个UTF-8 BOM，可能还是IE使用的Microsoft XML Parser的UTF-8 BOM Bug吧。这样解决办法就出来了：所有页面全部采用UTF8编码并使用无UTF-8 [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: small;">xajax是PHP下一个非常好的ajax框架，虽然xajax自己说自己是一个库(Library)，但是我觉得它更像一个框架（Framework）。xajax是一个开源的 <a href="http://xuplus.com/article/tag/php" class="st_tag internal_tag" rel="tag" title="标签 PHP 下的日志">PHP</a> 类库 它能够让你黏合HTML、CSS、Javascript和PHP，并可以结合Smarty模板系统使用。</span></p>
<p><span style="font-size: small;">在运用Xoops的Page模组的时候，发现其不能和中文正常工作，特别是不能和UTF-8编码的页面一起工作，昨天在利用这个实现DataGrid的时候发现完全不能正常工作了，一直报“the XML response that was returned from the server is invalid”这个错误，Google了一下，发现不少人也有这个问题。结合之前解决Xoops的Page模组（感谢文明猪）的UTF-8使用问题的方法，终于发现了完美解决xajax库使用中文的方法。</span></p>
<p><span style="font-size: small;">如果页面采用GB2312或GBK作为编码或字符集，一般网络上面提到的方法可以解决：需要注意的是common.php、server.php及server.php用到的php文件（特别是生成数据的文件）全部不要使用UTF-8编码格式保存而使用ASCII格式保存。同时server.php输出的数据内容最好也采用gb2312<a href="http://xuplus.com/article/tag/%e7%bc%96%e7%a0%81" class="st_tag internal_tag" rel="tag" title="标签 编码 下的日志">编码</a>。<br />
在common.php前面定义<br />
define(&#8216;<a href="http://xuplus.com/article/tag/xajax" class="st_tag internal_tag" rel="tag" title="标签 xajax 下的日志">XAJAX</a>_DEFAULT_CHAR_ENCODING&#8217;,'GB2312&#8242;);<br />
再在调用时使用：<br />
$xajax = new xajax();<br />
$xajax-&gt;decodeUTF8InputOn();<br />
或者<br />
$xajax = new xajax(&#8216;gb2312&#8242;);<br />
$xajax-&gt;setCharEncoding();<br />
$xajax-&gt;decodeUTF8InputOn();<br />
$objResponse = new xajaxResponse(&#8216;gb2312&#8242;); </span></p>
<p><span style="font-size: small;">如果页面采用UTF-8字符集的话，网上一些人说使用UTF-8格式编码就可以了，实际上即使全部使用UTF-8编码也不能正常工作，还是会报错：“the XML response that was returned from the server is invalid”。联想到之前在IE下碰到UTF-8 BOM Bug（文章：<a href="http://xuplus.com/article/2007/04/a6.html">IE下页面无端端空出一行及utf8页面无法显示的解决方法 </a>），会不会这个地方服务器传回的XML文件中也包含多个UTF-8 BOM内容呢？通过ethereal截获数据包发现，服务器返回的内容中还真是包含了多个UTF-8 BOM，可能还是IE使用的Microsoft XML Parser的UTF-8 BOM Bug吧。这样解决办法就出来了：所有页面全部采用UTF8编码并使用无UTF-8 BOM保存（UltraEdit 操作方法：F12或另存为界面中格式下拉框选择‘UTF-8－无 BOM’），页面包括xajax库文件、common.php文件、server.php文件。供访问的页面也可以使用无UTF-8 BOM保存。</span></p>
<p><span style="font-size: small;">有时候返回的参数（特别是中文部分）被url编码了，这个时候需要我们将返回的数据使用Urldecode进行处理，以便能够正常完成后面的数据库操作。 </span></p>
<p><span style="font-size: small;">最新xajax 0.25下载地址：<a title="http://prdownloads.sourceforge.net/xajax/xajax_0.2.5.zip?download" href="http://prdownloads.sourceforge.net/xajax/xajax_0.2.5.zip?download">http://prdownloads.sourceforge.net/xajax/xajax_0.2.5.zip?download</a></span></p>
<p><span style="font-size: small;">xajax中文手册（HonestQiao第一版，FlyingHail修改版） <a href="http://www.flyinghail.net/?p=44">http://www.flyinghail.net/?p=44</a></span></p>
<p><span style="font-size: small;">UTF-8 BOM解释：”EF BB BF” 这三个字节就叫BOM，BOM的全称叫做”Byte Order Mard”。在UTF-8文件中常用BOM来表明这个文件是UTF-8文件，而BOM的本意实在UTF-16中用来表示高低字节序列的。</span></p>
<p><span style="font-size: small;">另外，PHP网站上说使用&#8211;enable-zend-multibyte可以解决这类问题，不过没有尝试，并且预计在PHP 6.0中会对Unicode做完美的支持。</span></p>

	标签： <a href="http://xuplus.com/article/tag/php" title="PHP" rel="tag">PHP</a>, <a href="http://xuplus.com/article/tag/xajax" title="xajax" rel="tag">xajax</a>, <a href="http://xuplus.com/article/tag/%e4%b8%ad%e6%96%87" title="中文" rel="tag">中文</a>, <a href="http://xuplus.com/article/tag/%e7%bc%96%e7%a0%81" title="编码" rel="tag">编码</a><br />
]]></content:encoded>
			<wfw:commentRss>http://xuplus.com/article/2007/06/a37.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

