PHP SoapClient自动转义已转义的字符

时间:2014-09-30 17:57:26

标签: php xml soap escaping

我正在向包含转义货币符号的SoapService发送一些数据。例如,欧元符号为 €。但是,当调用SoapClient::__soapCall时,字符串会再次转义,因此最终看起来像 €

以下是我打电话的方式:

$params = new \stdClass();
$params->recipient = new \stdClass();
$params->recipient->name = "Some buyer";
$params->recipient->email = "test@test.com";
$params->data = new \stdClass();
$params->data->name = "total";
$params->data->value = "91,04 €"

$soap = new \SoapClient(); //Skipping the usual settings for the sake of brevity
$soap->__soapCall('send', [$params]);

我实际上正在使用扩展SoapClient的类来删除调用SoapClient::__soapCall的方法,但这并不会影响有效负载。我已经检查过,直到调用SoapClient::__soapCall时,所有内容都如上所述。

关于如何避免这种情况的任何想法?

1 个答案:

答案 0 :(得分:0)

对数据进行编码,将 €更改为 €,以便将其转换为插入XML。如果你在接收端看它,当它出现时它将被转换回 €。所以你输入的内容是什么

因此,更重要的是要确保以接收端需要的格式发送数据。如果您的数据有HTML实体但接收端需要正常的非实体版本,那么{{ 1}}数据。它与您在本地进行调用的方式相同,如果本地方法不能与实体一起使用,那么您最好先手动解码这些实体。

如果您正在进行编码,因为您知道它将被插入到XML中,那么您正在执行额外的步骤,因为soap客户端已经为您执行此操作。只要坚持在另一端需要出现的任何东西。