簡體   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