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

时间: 2024-09-22 22:24:50

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

访问php时提示内存位置访问无效的解决办法和思路分析_win服务器

我们就需要找到是哪一个DLL文件加载出现了问题.排查方法是: 将php.ini中 display_startup_errors = Off 改为display_startup_errors = On . 这是访问php页面,服务器上会弹出php错误的提示对话框,你就可以明确看到是哪一个dll文件加载失败,有时会有多个dll文件加载失败,需要你先分号(;)注释掉php.ini中提示那个dll后继续访问如此反复排查. 把出问题的dll都用分号(;)注释掉后,php就可以正常运行了. 如果加载失败的d

Visual Studio 2015中创建C#的Android项目提示"Value cannot be null"的解决方法

原文:Visual Studio 2015中创建C#的Android项目提示"Value cannot be null"的解决方法 选择C# > Android创建一个Blank App时提示如下错误: Value cannot be null. Parameter name: path1 由于之前本机已安装过Android SDK,在安装Visual Studio 2015时跳过了,并没有为Xamarin指定对应路径导致.Visual Studio顶部菜单:Tools >

win7纯净版系统开机黑屏提示ntoskrnl.exe文件丢失如何解决

  ntoskrnl.exe是什么文件? ntoskrnl.exe 是 Windows 操作系统下载的一个重要进程,在系统预启动和启动阶段后,进入内核调用阶段时由 Ntldr 调用 ntoskrnl.exe,因此缺少该文件就会无法启动系统了. 解决方法: 1.在同版本的正常win7系统电脑上,进入 C:windowsSystem32目录,拷贝 ntoskrnl.exe 文件.当然也可到网上下载; 2.在WINPE 或DOS下将拷贝的文件复制粘贴到有问题的Win7系统内相应目录下(建议使用U盘PE

installshield制作的安装包卸载时提示重启动的原因以及解决办法

原文:installshield制作的安装包卸载时提示重启动的原因以及解决办法 有时候卸载installshield制作的安装包程序,卸载完会提示是否重启电脑以完成所有卸载,产生这个提示的常见原因有如下几种:1. 卸载时,程序正处于运行状态2. 卸载时,程序文件夹处于打开状态3. 卸载时,有文件被别的进程调用,或者在进程中,常见情况如dll在进程中 一般来说解决办法是针对第三种情况的,解决办法是卸载时强制杀进程,比如在OnMaintUIBefore或者OnUninstall里写上强制杀进程的代码

微信零钱提现提示交易异常原因分析与解决办法

1.我们先来提现看看,我们在微信中点击[我]点击打开[零钱]如下所示; 2.进入之后我们再点击[提现]选项打开进入效果如下; 3.好了在此填写你要[提现]金额点击提现按钮; 4.输入你绑定银行卡时设定的支付密码; 5.好了这样就提交申请了,之后点击[完成]. 6.如果没有问题就会出现提现成功了,如我们现在点击[账户安全] 7.在弹出的窗口点击打开[交易异常]; 8.好了这是什么原因我们进入然后点击提示界面中的[点击此处]; 9.之后根据向导选择操作之后点击[提交]. 10.如果客服回复之后,还是

在JSP开发中使用jdom解析临时存放数据的XML文件

dom|js|xml|数据     在我工作过程中,遇到了对临时存储产品信息的XML文件进行操作的问题.其中就有对XML文件的解析操作,考虑到用DOM或SAX比较麻烦,于是我选择了用jdom进行解析.因为我的XML文件结构比较简单,仅有两层,而且没有复杂的属性,所以没有用到里面太多的方法,只希望能够抛砖引玉,给初学者一点帮助.     下面我就把大概的实现过程说一说.     一.实现解析xml文件的JavaBean(XMLBean):     我把对存放产品信息的xml文档的全部操作都写在了X

phpStorm打开提示 failed to create JVM 的解决办法

phpStorm 软件打开运行提示 failed to create JVM的解决办法. 修改文件 D:\Program Files (x86)\JetBrains\PhpStorm 7.1.3\bin\PhpStorm.exe.vmoptions 把内存值改成标准值,文件全部内容如下: -server -Xms128m -Xmx512m -XX:MaxPermSize=250m -XX:ReservedCodeCacheSize=64m -ea -Dsun.io.useCanonCaches=

Win8系统无法打开网页提示”浏览器控件不兼容“解决办法

  Win8系统无法打开网页提示"浏览器控件不兼容"解决办法: 1.进入Win8系统,然后,使用鼠标双击要浏览的图标即可将浏览器打开; 2.在Win8系统窗口右上角处,点击工具按钮,再选择"Internet选项",接着在窗口上点击高级选项卡; 3.在Win8系统窗口高级选项卡下,点击"启动增强保护模式",然后使用鼠标将选英方框内的勾取消掉,并在窗口右下角点击"确定"按钮保存,即可解决浏览器无法显示故障; 4.返回Win8系统浏

Win7开机提示登录组件错误4的解决办法

  Win7开机提示登录组件错误4的解决办法.不少小伙伴平时都会安装一些安全软件来保护自己的电脑吧,但是有的安全软件未必能帮助到你噢,有小伙伴说自己电脑开机的时候提示登录组件错误4,请重新启动电脑管家,要怎么解决这个问题呢?下面就让小编来告诉你. 登录组件错误4,请重新启动电脑管家 这个问题是由于登录组件相关DLL文件遭到破坏,或者是登录组件版本过旧导致的. 使用以下方法尝试解决: 1. 开始-运行-输入:regedit 找到以下注册表项,删除掉: (32位系统)HKEY_LOCAL_MACHI