繁体   English   中英

NuSOAP 和内容类型

[英]NuSOAP and content type

无法弄清楚如何让 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 的行。我错过了什么?

尝试:

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

还要确保您发送的是 utf8 编码数据,否则会有点矛盾。 (utf8_encode())。

改变

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

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

在 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 标头。

使用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 测试。

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

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

将文件示例 ANSI 更改为 utf-8 或不带 BOM 的 utf-8。

谢谢。

$client->soap_defencoding = 'UTF-8';
$client->setHTTPContentType('application/soap+xml');

这是我在遇到这个问题时最终做的事情(在拔掉头发几天后):

挖掘 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';

供参考我的客户端 - > VB.NET 3.5 桌面应用程序

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM