NuSOAP和内容类型

时间:2011-03-15 20:48:12

标签: php nusoap

无法弄清楚如何使NuSOAP使用UTF-8作为内容类型。它不断吐出“ISO-8859-1”。这是我尝试的相关代码位:

$soapclient=new soapclient($url1,'wsdl');
$soapclient->http_encoding='utf-8';
$soapclient->defencoding='utf-8';

if($soapclient->fault){
    $retdata=$soapclient->fault;
}else{
    if($soapclient->getError()){
        $retdata=$soapclient->getError();
    }else{
                    $params=array($xmldata);
                    $retdata=$soapclient->call($doit,$params,$url1,$url2);
    }
} 

这是请求:

POST xxxxxxxxxxxx HTTP/1.0
Host: xxxxxxxxxxxxx
User-Agent: NuSOAP/0.9.5 (1.123)
Content-Type: text/xml; charset=ISO-8859-1
SOAPAction: "xxxxxxxxxxxxxxxxx"
Content-Length: 1629

我甚至进入了nusoap.php并更改了几行ISO硬编码的行。我错过了什么?

6 个答案:

答案 0 :(得分:11)

尝试:

$soapClient->soap_defencoding = 'UTF-8';
$soapClient->decode_utf8 = false;

还要确保你发送utf8编码数据,否则有点矛盾。 (函数utf8_encode())。

答案 1 :(得分:1)

使用SoapClient对我来说很好。

以下是一个例子:

<?php
$client = new SoapClient(
                    "http://localhost/app/ws/index.php?ws=data&wsdl",
                    array('encoding'     => 'UTF-8',)
            );

$data = $client->__soapCall("data.getData", array(1));
?> 

使用PHP 5.3.3进行测试。

答案 2 :(得分:1)

更改

$soapclient->defencoding='utf-8';

$soapclient->soap_defencoding='utf-8';

答案 3 :(得分:1)

在NuSOAP中,HTTP内容类型设置在两个文件中:

class.soap_server.php

nusoap.php

首先在每个文件中找到行:

header("Content-Type: text/xml; charset=ISO-8859-1\r\n");

并用

替换它们
header("Content-Type: text/xml; charset=UTF-8\r\n");

它将解决您的HTTP标头问题。但我不确定这会解决任何编码问题,因为我一直在努力解决NuSOAP中的UTF-8编码问题,这不仅仅是因为HTTP Headers。

答案 4 :(得分:0)

以下是我遇到这个问题时最终做的事情(经过几天拉头发后):

浏览NuSOAP文件并找到变量:$soap_defencoding,默认为ISO-8859-1。但是,在右下方的行是默认为UTF-8的声明的注释版本。

我发现了两个地方:nusoap_base.phpnusoap.php。当我两个都改过来时,我发现我的问题消失了(反过来两行的评论)。

问题:客户抱怨响应编码为ISO-8859-1
解决方案:更改NuSOAP文件nusoap_base.phpnusoap.php中的以下行:

自:
var $soap_defencoding = 'ISO-8859-1';
//var $soap_defencoding = 'UTF-8';
于:
//var $soap_defencoding = 'ISO-8859-1';
var $soap_defencoding = 'UTF-8';

供我参考客户 - &gt; VB.NET 3.5桌面应用程序

答案 5 :(得分:0)

仔细检查实际文件是否在utf-8编码下。有时问题是实际文件,其编码通常发生在Linux服务器上。

尝试更改整个nusoap库以及控制器和查看文件。

将文件示例ANSI更改为utf-8或utf-8而不使用BOM。

感谢。