Php Nusoap не работает с латинскими символами

Я разрабатываю веб-сервис, используя Nusoap для отправки XML-данных, и на этот раз мне нужно отправлять данные с латинскими символами, такими как «ó». Однако, когда я помещаю его в клиент мыла, он перестает работать. Ниже приведена сводка кода, разрабатываемого для проверки отправки xml с латинскими символами.

Это краткое изложение разрабатываемого серверного кода:

include_once("nusoap/nusoap.php");
$server = new soap_server();
$server->configureWSDL("PersonImport","urn:PersonImport");

$server->register("PersonImport",array("login" => "xsd:string", 'senha' => 'xsd:string', 'fornecedor' => 'xsd:string'),array("return" => "xsd:string"),"urn:PersonImport","urn:PersonImport#PersonImport");


function PersonImport($login,$senha,$fornecedor) {

    //Just for debug purposes
    $return = "My login Is <b>".$login . "</b> And My senha Is <b>".$senha."</b> And My fornecedor Is <b>".$fornecedor."</b>.";

    (...)(ommited code, xml parsing and response xml generation)

    return $return;
}

Это резюме клиентского кода:

<?php

require_once("nusoap/nusoap.php");
$client = new soapclient("example.com?wsdl");


$xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>";
$xml .= "<fornecedor>";
$xml .= "<NAME1>Gian</NAME1>";
$xml .= "<MCOD1>Giancarlo SA</MCOD1>";
$xml .= "<STCD1>80048303000113</STCD1>";
$xml .= "<STCD2>55670185501</STCD2>";
$xml .= "<STCD3>5508150087</STCD3>";
$xml .= "<RG>359730553</RG>";
$xml .= "<STRAS>rua itororó</STRAS>";
$xml .= "<HOUSE_NUM1>81</HOUSE_NUM1>";
$xml .= "<HOUSE_NUM2>301</HOUSE_NUM2>";
$xml .= "<ORT02>Menino Deus</ORT02>";
$xml .= "<PSTLZ>90110290</PSTLZ>";
$xml .= "<REGIO>RS</REGIO>";
$xml .= "<ORT01>Porto Alegre</ORT01>";
$xml .= "<TELF1>32335675</TELF1>";
$xml .= "<TELFX>32335675</TELFX>";
$xml .= "<SMTP_ADDR>[email protected]</SMTP_ADDR>";
$xml .= "<ERDAT>2016-10-04</ERDAT>";
$xml .= "<ChangeData>2016-10-04</ChangeData>";
$xml .= "<StartData>2016-10-04</StartData>";
$xml .= "<OffData>2016-10-04</OffData>";
$xml .= "</fornecedor>";

$result = $client->PersonImport("login","password", $xml);


echo $result;

Линия

$xml .= "<STRAS>rua itororó</STRAS>";

имеет особый характер. Если я удалю символ «ó», он сработает.

Я попытался установить кодировку в xml:

$xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>";

Это сработало для меня, когда мне пришлось анализировать xml с помощью SimpleXML Parser, но это не сработало с мылом.

Я попытался установить заголовок страницы для utf8 или ISO-8859-1 следующим образом:

header("Content-type:text/html; charset=UTF-8");

or:

header ('Content-type: text/html; charset=ISO-8859-1');

Я пытался использовать htmlentities, но объект для 'ó' был '& o a c u t e;' который имеет специальный символ '&', и тогда возникает та же проблема.

Функция сериализации не решила проблему.

Я не мог найти ответ до сих пор в Google.

Можно ли передавать латинские специальные символы с помощью nusoap? Должен быть способ.


person giancarloap    schedule 05.10.2016    source источник
comment
Кажется, я нашел способ. Используя CDATA, я могу избежать '&', поэтому я могу использовать htmlentities для строк, например: $xml .= "<STRAS><![CDATA[".htmlentities("Rua Itororó")."]]></STRAS>";. Я тестирую его, если он всегда работает нормально, я буду использовать его в качестве ответа.   -  person giancarloap    schedule 05.10.2016


Ответы (1)


Кажется, я нашел способ. Используя CDATA, я могу избежать «&», поэтому я могу использовать htmlentities для строк, например:

$xml .= "<STRAS><![CDATA[".htmlentities("Rua Itororó")."]]></STRAS>";
person giancarloap    schedule 11.10.2016