PHP-сервер мыла с двойным кодированием строк HTML - PullRequest
0 голосов
/ 07 июля 2011

У меня проблема с тем, что мой php soap webservice использует строки двойного кодирования. Например, если я попытаюсь вернуть строку O'Test, я получу O'Test. То, что я ожидал увидеть, это O'Test. Похоже, что происходит, когда & сам кодируется?

Я посмотрел, что возвращает phpinfo() (это php версия 5.1.6), но я не вижу ничего очевидного.

Мой код для инициализации сервера мыла использует массивы для автоматизации инициализации моих функций и типов, но это суть того, что я делаю:

$server = new soap_server();

$server->configureWSDL('server', 'urn:sg');

$server->wsdl->addComplexType( 'testCall', 'complexType', 'struct', 'all', '', array( 'name' => 'testName', 'type' => 'xsd:string' ) );

$server->register( $fname,
array( 'request' => 'tns:TestCallRequest' ),
array( 'return' => 'tns:TestCallResponse' ),
'urn:sg',
'urn:sg#testCall' );

$server->service($HTTP_RAW_POST_DATA);

Вот функция, представленная $fname выше:

function testCall() {
    $result = array();

    $result[testName] = 'O\'Test';

    return $result;
}

Вот запрос мыла и ответ, который я вижу с точки зрения клиента:

<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:sg"><soapenv:Header/><soapenv:Body><urn:testCall soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><urn:TestCallRequest></urn:TestCallRequest></urn:testCall></soapenv:Body></soapenv:Envelope>

<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="urn:sg"><SOAP-ENV:Body><ns1:TestCallResponse xmlns:ns1="urn:sg"><return xsi:type="tns:TestCallResponse"><testName xsi:type="xsd:string">O&amp;apos;Test</testName></return></ns1:TestCallResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
...