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. Что мне не хватает?


person Bill    schedule 15.03.2011    source источник


Ответы (6)


Пытаться:

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

Также убедитесь, что вы отправляете данные в кодировке utf8, иначе это немного противоречит. (utf8_encode()).

person vicTROLLA    schedule 15.03.2011
comment
ну, похоже, это не имело значения. - person Bill; 16.03.2011
comment
после дальнейшей работы над этим я все еще получаю ту же проблему. Я добавил это: $xmldata=utf8_encode($xmldata); поместите это в начало скрипта: header('Content-Type: text/html; charset=utf-8'); установите мой php.ini: default_charset = utf-8, и все равно он отображается как «charset = ISO-8859-1! Что дальше делать? - person Bill; 16.03.2011
comment
Я потратил часы и часы, чтобы найти решение. Спасибо, ты человек дня. - person Alain Tiemblo; 05.12.2012

использование 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.

person Jorge Olivares    schedule 21.03.2012

Сдача

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

to

$soapclient->soap_defencoding='utf-8';
person Alejandro García    schedule 22.08.2012

Кажется, в 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.

person devran    schedule 16.10.2012

Вот что я сделал, когда столкнулся с этой проблемой (через пару дней выдергивания волос):

Покопался в файлах NuSOAP и нашел переменную: $soap_defencoding, которая по умолчанию равна ISO-8859-1. Однако в строке ниже находится закомментированная версия объявления, которая по умолчанию имеет значение UTF-8.

Я нашел это в двух местах: nusoap_base.php и nusoap.php. Я обнаружил, что моя проблема исчезла, когда я оба изменился (инверсия комментариев к двум строкам).

Проблема: Клиент жалуется, что кодировка ответа ISO-8859-1
Решение: Измените следующие строки в файлах NuSOAP 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

person Kingsolmn    schedule 19.01.2012

Дважды проверьте фактический файл, находится ли он в кодировке utf-8. Иногда проблема заключается в самом файле, и его кодирование обычно происходит на сервере Linux.

Попробуйте изменить всю библиотеку nusoap и файлы контроллера и просмотра.

Измените пример файла ANSI на utf-8 или utf-8 без спецификации.

Благодарю.

person zero8    schedule 15.12.2016