1--TEST-- 2Bug #38004 (Parameters in SoapServer are decoded twice) 3--EXTENSIONS-- 4soap 5--INI-- 6soap.wsdl_cache_enabled=0 7--FILE-- 8<?php 9function Test($param) { 10 global $g; 11 $g = $param->strA."\n".$param->strB."\n"; 12 return $g; 13} 14 15class TestSoapClient extends SoapClient { 16 function __construct($wsdl) { 17 parent::__construct($wsdl); 18 $this->server = new SoapServer($wsdl); 19 $this->server->addFunction('Test'); 20 } 21 22 function __doRequest($request, $location, $action, $version, $one_way = 0): ?string { 23 ob_start(); 24 $this->server->handle($request); 25 $response = ob_get_contents(); 26 ob_end_clean(); 27 return $response; 28 } 29} 30 31$client = new TestSoapClient(__DIR__.'/bug38004.wsdl'); 32$strA = 'test & test'; 33$strB = 'test & test'; 34$res = $client->Test(array('strA'=>$strA, 'strB'=>$strB)); 35print_r($res); 36print_r($g); 37?> 38--EXPECT-- 39test & test 40test & test 41test & test 42test & test 43