<?
$client = new SoapClient('http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl');
$client->soap_defencoding = 'UTF-8';
$client->decode_utf8 = false;
$obj = $client->toTraditionalChinese(array('sText'=>'个'));
print_r($obj);
?>
这个是我写的一个调用网上公开的简繁转换的webservice的代码,我已经指定了soap_defencoding为UTF-8,decode_utf8设置成false,但是执行了之后提示【Encoding: string '\xb8...' is not a valid utf-8 string 】请大家帮忙看看这个该怎么处理

解决方案 »

  1.   

    Encoding: string '\xb8...' is not a valid utf-8 string
    传递的参数不是 utf-8 的串就是说你的 array('sText'=>'' 不是utf-8 的
    也就是说你的程序文件不是 utf-8 的
    不过,如果是 utf-8 的,又何必声明字符集呢?
    另外
    $client->soap_defencoding = 'UTF-8';
    $client->decode_utf8 = false;
    是 nusoap 的写法
      

  2.   


    我也用nusoap的方式写过,执行php虽然没有报错,但是出来的结果是???,也是乱码,我把soapclient方式和nusoap方式的两个文件都另存为utf-8的格式就都正常了,也不用声名字符集。
    是否只能用utf-8格式的来保存文件才可以?
      

  3.   

    soap 是通过 xml 传递数据的
    而 xml 的默认字符集是 utf-8,所以不声明字符集的情况下,就是 utf-8 了你的应用实际是需要使用 gbk 的(从错误信息就可看到)
    所以你用 nusoap 时需要 $client->soap_defencoding = 'gbk';
    或修改 nusoap 的代码
    使用 php 内置的 SoapClient 时
    需要 $client = new SoapClient('http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl', array('encoding'=>'GBK'));