dmitry Wed Jul 12 09:00:15 2006 UTC Modified files: /php-src/ext/soap php_encoding.c /php-src/ext/soap/tests/bugs bug38067.phpt bug38067.wsdl Log: Fixed bug #38067 (Parameters are not decoded from utf-8 when using encoding option) http://cvs.php.net/viewvc.cgi/php-src/ext/soap/php_encoding.c?r1=1.133&r2=1.134&diff_format=u Index: php-src/ext/soap/php_encoding.c diff -u php-src/ext/soap/php_encoding.c:1.133 php-src/ext/soap/php_encoding.c:1.134 --- php-src/ext/soap/php_encoding.c:1.133 Tue Jul 11 14:36:05 2006 +++ php-src/ext/soap/php_encoding.c Wed Jul 12 09:00:15 2006 @@ -17,7 +17,7 @@ | Dmitry Stogov <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: php_encoding.c,v 1.133 2006/07/11 14:36:05 dmitry Exp $ */ +/* $Id: php_encoding.c,v 1.134 2006/07/12 09:00:15 dmitry Exp $ */ #include <time.h> @@ -1349,12 +1349,12 @@ str_val = (*attr)->def; } if (str_val) { - zval zstr; - xmlNodePtr dummy; + xmlNodePtr dummy, text; zval *data; - ZVAL_STRING(&zstr, str_val, 0); - dummy = master_to_xml(get_conversion(IS_STRING), &zstr, SOAP_LITERAL, NULL); + dummy = xmlNewNode(NULL, BAD_CAST("BOGUS")); + text = xmlNewText(BAD_CAST(str_val)); + xmlAddChild(dummy, text); data = master_to_zval((*attr)->encode, dummy); xmlFreeNode(dummy); set_zval_property(ret, (*attr)->name, data TSRMLS_CC); http://cvs.php.net/viewvc.cgi/php-src/ext/soap/tests/bugs/bug38067.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/soap/tests/bugs/bug38067.phpt diff -u /dev/null php-src/ext/soap/tests/bugs/bug38067.phpt:1.2 --- /dev/null Wed Jul 12 09:00:15 2006 +++ php-src/ext/soap/tests/bugs/bug38067.phpt Wed Jul 12 09:00:15 2006 @@ -0,0 +1,40 @@ +--TEST-- +Bug #38067 (Parameters are not decoded from utf-8 when using encoding option) +--SKIPIF-- +<?php require_once('skipif.inc'); ?> +--FILE-- +<?php +function Test($param) { + global $g; + $g = $param->str; + return $g; +} + +class TestSoapClient extends SoapClient { + function __construct($wsdl, $opt) { + parent::__construct($wsdl, $opt); + $this->server = new SoapServer($wsdl, $opt); + $this->server->addFunction('Test'); + } + + function __doRequest($request, $location, $action, $version) { + ob_start(); + $this->server->handle($request); + $response = ob_get_contents(); + ob_end_clean(); + return $response; + } +} + +$client = new TestSoapClient(dirname(__FILE__).'/bug38067.wsdl', + array('encoding' => 'ISO-8859-1')); +$str = 'test: Ä'; +$res = $client->Test(array('str'=>$str)); +echo $str."\n"; +echo $res."\n"; +echo $g."\n"; +?> +--EXPECT-- +test: Ä +test: Ä +test: Ä http://cvs.php.net/viewvc.cgi/php-src/ext/soap/tests/bugs/bug38067.wsdl?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/soap/tests/bugs/bug38067.wsdl diff -u /dev/null php-src/ext/soap/tests/bugs/bug38067.wsdl:1.2 --- /dev/null Wed Jul 12 09:00:15 2006 +++ php-src/ext/soap/tests/bugs/bug38067.wsdl Wed Jul 12 09:00:15 2006 @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="UTF-8"?> +<definitions + xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" + xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" + xmlns:s="http://www.w3.org/2001/XMLSchema" + xmlns:s0="http://test.pl" + targetNamespace="http://test.pl" + xmlns="http://schemas.xmlsoap.org/wsdl/"> + <types> + <s:schema elementFormDefault="qualified" targetNamespace="http://test.pl"> + <s:complexType name="Test"> + <s:attribute use="required" name="str" type="s:string"/> + </s:complexType> + <s:element type="s0:Test" name="Test"/> + <s:element type="s:string" name="Ret"/> + </s:schema> + </types> + + <message name="TestSoapIn"> + <part name="parameters" element="s0:Test"/> + </message> + <message name="TestSoapOut"> + <part name="parameters" element="s0:Ret"/> + </message> + <portType name="TestSoap"> + <operation name="Test"> + <input message="s0:TestSoapIn"/> + <output message="s0:TestSoapOut"/> + </operation> + </portType> + <binding name="TestSoap" type="s0:TestSoap"> + <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> + <operation name="Test"> + <soap:operation soapAction="http:/Test/Test" style="document"/> + <input> + <soap:body use="literal"/> + </input> + <output> + <soap:body use="literal"/> + </output> + </operation> + </binding> + <service name="Test"> + <port name="TestSoapPort" binding="s0:TestSoap"> + <soap:address location="http://localhost/server.php"/> + </port> + </service> +</definitions>
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php