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


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代码

  define('XAJAX_DEFAULT_CHAR_ENCODING','GB2312'); 

  再在调用时使用:

  PHP代码

  $xajax = new xajax();  

  $xajax->decodeUTF8InputOn(); 

  或者

  PHP代码

  $xajax = new xajax('gb2312');  

  $xajax->setCharEncoding();  

  $xajax->decodeUTF8InputOn();  

  $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做完美的支持



相关阅读:
JS+Ajax+Jquery实现页面无刷新分页以及分组 超强的实现
用innerHTML &符号副值给文本框后会变成&的方法
access中数据表的自动重新联接
黑客选择CSS代码挂马 CSS挂马攻防实录
正版Windows 7安装出现错误0XC004F061
浅谈Ajax技术中的先进性与局限性
PHP测试驱动开发介绍
在Linux下杀Windows病毒 Avast! for Linux
PHP5生成条形码的简单实例
javscript对象原型的一些看法
AJAX技术 vs 传统的ASP无刷新技术
Oracle11g新特性:Server Result Cache
MooTools教程(4):函数和MooTools
linux对中毒u盘分区和格式化
快速导航

Copyright © 2016 phpStudy |