PHP XML error parsing SOAP payload on line 1

2015-01-24信息快讯网

PHP中GBK页面调用WebService的编码问题:XML error parsing SOAP payload on line 1

WebService,想必大家都比较熟悉,是由“服务提供方”向“服务调用方”提供服务的一种方式。里面有几项关键的技术:

XML:描述数据的标准方法
SOAP:简单对象访问协议,用于信息交换
WSDL:Web服务描述语言
UDDI:通用描述、发现与集成,它是一种独立于平台的,基于XML语言的用于在互联网上描述商务的协议。

  SOAP默认传输的都是UTF-8的编码,这也决定了默认情况下WebService用的也是UTF-8编码。

  现在维护的那个项目是一个PHP项目,编码用的全是GBK,在调用自身提供的WebService方法时,就会遇到编码问题了。PHP页面调用WebService,而这个WebService又调用的是另一个调用COM组件的PHP类。大概场景就是这样。
 
PHP页面(GBK) -> WebService(UTF-8) -> PHP类(GBK) 

  在未遇到问题之前,一切都是风平浪静的,就这样过了很多年。有一天,公司收购了其它公司,为了整合服务,用户信息也整合到一起了,原公司所有用户的帐户都是由英文字符加数字组成的,而收购的这个公司没有做这样的限定,帐户有汉字的情况。整合之后,问题出现了,“error in msg parsing: XML error parsing SOAP payload on line 1: Invalid character [detail]”!

  PHP刚接触不久,不是甚熟,而且NetBeans的调试灰常不好整。所以就打开VS,引用WebService,开始测试。返回的结果,找不到用户,而且是乱码,OK,看了一下之后,由于WebService的UTF-8编码传给PHP类时,编码不一致所导致!转换为GBK再传过去,收到数据后,找到用户,但还是乱码。将返回过来的数据再次转换为UTF-8之后,一切OK!VS下测试一切正常!上测试机!开始测试!打开之后,乱码!仍然是“error in msg parsing: XML error parsing SOAP payload on line 1: Invalid character [detail]”澹

  静下心来,继续分析!应该是PHP页面调用WebService时所导致!VS下面的那个测试页面是UTF-8的,他们之间没有问题,但PHP的这个页面是GBK的。再次修改后,一切又恢复平静了。
 
调用:PHP页面,参数转换为UTF-8 -> WebService,转换为GBK后 -> PHP类 
返回:PHP类 -> WebService,收到后转化为UTF-8 -> PHP页面,转换为GBK 
用PHP写的基于Memcache的Queue实现代码
PHP中去除换行解决办法小结(PHP_EOL)
php操作SVN版本服务器类代码
支持中文的php加密解密类代码
php UBB 解析实现代码
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
Linux fgetcsv取得的数组元素为空字符串的解决方法
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
php array_filter除去数组中的空字符元素
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
PHP mb_convert_encoding文字编码的转换函数介绍
Pain 全世界最小最简单的PHP模板引擎 (普通版)
php环境配置之CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI比较?
PHP pathinfo()获得文件的路径、名称等信息说明
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
PHP正确配置mysql(apache环境)
PHP操作xml代码
PHP zlib扩展实现页面GZIP压缩输出
PHP,ASP.JAVA,JAVA代码格式化工具整理
PHP迅雷、快车、旋风下载专用链转换代码
PHP中实现汉字转区位码应用源码实例解析
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
PHP中json_encode、json_decode与serialize、unserialize的性能测试分析
phpmyadmin里面导入sql语句格式的大量数据的方法
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
phpmyadmin 3.4 空密码登录的实现方法
Windows7下PHP开发环境安装配置图文方法
php 提速工具eAccelerator 配置参数详解
Godaddy空间Zend Optimizer升级方法
php disk_free_space 返回目录可用空间
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
PHP 开发环境配置(Zend Server安装)
QueryPath PHP 中的jQuery
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
php str_pad() 将字符串填充成指定长度的字符串
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
©2014-2024 dbsqp.com