努力思考 + 实践, 眼高手低是不行的. 注册 | 登陆

PHP中xajax库中文问题及提示返回XML文件无效的解决办法

转自:http://web2world.cn/article/2007/06/a35.html

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前面定义 

PHP代码
  1. define('XAJAX_DEFAULT_CHAR_ENCODING','GB2312');  


再在调用时使用:

PHP代码
  1. $xajax = new xajax();   
  2. $xajax->decodeUTF8InputOn();  

或者

PHP代码
  1. $xajax = new xajax('gb2312');   
  2. $xajax->setCharEncoding();   
  3. $xajax->decodeUTF8InputOn();   
  4. $objResponse = new xajaxResponse('gb2312');   


如果页面采用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 BOM保存(UltraEdit 操作方法:F12或另存为界面中格式下拉框选择‘UTF-8-无 BOM’),页面包括xajax库文件、common.php文件、server.php文件。供访问的页面也可以使用无UTF-8 BOM保存。

有时候返回的参数(特别是中文部分)被url编码了,这个时候需要我们将返回的数据使用Urldecode进行处理,以便能够正常完成后面的数据库操作。

最新xajax 0.25下载地址:http://prdownloads.sourceforge.net/xajax/xajax_0.2.5.zip?download

xajax中文手册(HonestQiao第一版,FlyingHail修改版) http://www.flyinghail.net/?p=44

UTF-8 BOM解释:"EF BB BF" 这三个字节就叫BOM,BOM的全称叫做"Byte Order Mard"。在UTF-8文件中常用BOM来表明这个文件是UTF-8文件,而BOM的本意实在UTF-16中用来表示高低字节序列的。

另外,PHP网站上说使用--enable-zend-multibyte可以解决这类问题,不过没有尝试,并且预计在PHP 6.0中会对Unicode做完美的支持。

Tags: php相关, xajax, ajax

« 上一篇 | 下一篇 »

只显示5条记录相关文章

Ajax开发中的跨域 (浏览: 5337, 评论: 3)
Content-Type大全 (浏览: 4547, 评论: 0)
[转] 不可多得的Javascript(AJAX)开发工具 - Aptana (浏览: 7075, 评论: 8)

Trackbacks

点击获得Trackback地址,Encode: UTF-8

4条记录访客评论

我还不会用ajax

Post by 星野天河 on 2007, July 23, 4:10 PM 引用此文发表评论 #1

引用 星野天河 说过的话:
我还不会用ajax


学学就会了.偶还做了学习笔记呢.

Post by zwws on 2007, July 24, 1:30 AM 引用此文发表评论 #2

疯了,解决不了,以前的垃圾代码受不了

Post by zifa on 2008, September 10, 8:20 PM 引用此文发表评论 #3

@zifa
老大google到俺这里来啦?

Post by zwws on 2008, September 12, 10:44 PM 引用此文发表评论 #4


本文因为某种原因此时不允许访客进行评论