Невозможно выяснить, как заставить 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 отлично подходит для меня.
Вот пример:
<?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.
+ Изменить
$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-заголовками. Но я не уверен, что это решит любую проблему с кодировкой, поскольку я борюсь с проблемой кодирования UTF-8 в NuSOAP, это связано не только с заголовками HTTP.
Вот что я сделал, когда столкнулся с этой проблемой (через пару дней вытащил волосы):
Пошел по файлам NuSOAP и нашел переменную: $soap_defencoding
которая по умолчанию соответствует ISO-8859-1
. Тем не менее, в строке, приведенной ниже, представлена версия комментария, которая по умолчанию соответствует UTF-8
.
Я нашел это два места: nusoap_base.php
и nusoap.php
. Я обнаружил, что моя проблема исчезла, когда я изменил ее (обратный комментарий к двум строкам).
Проблема: клиент жалуется, что кодировка ответа – ISO-8859-1
Решение. Измените следующие строки в файлах nusoap.php
: nusoap_base.php
и nusoap.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»
Двойная проверка фактического файла заключается в кодировке utf-8. Иногда проблема заключается в фактическом файле, и его кодирование обычно происходит с сервером Linux.
Попробуйте изменить всю библиотеку nusoap и контроллер и просмотреть файлы.
Измените пример файла ANSI на utf-8 или utf-8 без спецификации.
Благодарю.