美好的一天,
我在nusoap中传递xml时遇到问题。
样品: 我传递了这个xml
<test>123</test>
nusoap响应是
test123/test
删除大于号和小于号。
这是我的服务器代码:
require_once('nusoap/nusoap.php');
$server = new nusoap_server; // Create server instance
$server->configureWSDL('demows','http://example.org/demo');
$server->register('myFunction',
array("param"=>"xsd:string"), // input
array("result"=>"xsd:string"), // output
'http://example.org/demo'
);
function myFunction($parameters) {
return $parameters;
}
// Use the request to try to invoke the service
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA: '';
$server->service($HTTP_RAW_POST_DATA);
这是我的客户代码:
require_once('nusoap/nusoap.php');
$client = new nusoap_client('http://localhost/nusoap/ws.php?wsdl', true);
$clientparam = '<test>123</test>';
$result = $client->call('myFunction',
array('param'=>$clientparam)
);
print_r($result);
*请注意,上面的代码适用于PHP版本5.3.0,但不适用于PHP版本5.2.0-8 + etch13,这是我们生产中使用的版本。
我在网上搜索了2版本的任何问题但没有找到。 任何帮助都非常感谢。 TIA
答案 0 :(得分:1)
升级libxml2并重建PHP。
答案 1 :(得分:0)
我根本不知道nusoap,但听起来你的实体被丢弃了。 可能值得控制两端的实体,例如通过更改“&gt;” for&amp; gt;,'&lt;' for&amp; lt;手动或使用htmlentities()等功能
答案 2 :(得分:0)
不确定你是否使用了不同版本的nusoap,但我一直在使用代理,这似乎有效。我还使用soapclient而不是nusoap_client实例化客户端(之前没见过):
$client = new soapclient('http://localhost/nusoap/ws.php?wsdl', true);
$proxy = $client->getProxy();
$response = $proxy->call("myfunction", array('test' => 123));
答案 3 :(得分:0)
是的,答案在 soapval 课程中。
有点凌乱,但简单的例子是here。 在快速 - 你必须用这个类包装任何非泛型类型,这意味着即php数组。这种包装的嵌套当然可以发生,但它并不违背设计。
答案 4 :(得分:0)
如果你想在soap消息中传递xml值并控制服务器和客户端(或者至少你可以指示客户端),为什么不对你的xml进行base64编码。然后解析器只会将其视为普通字符串而不会混淆。