2014-09-30 35 views
0

我发送一些数据到包含转义货币符号的SoapService。例如欧元符号为 €。然而,当SoapClient::__soapCall被调用时,琴弦被再次逃脱所以它最终看起来像 €PHP SoapClient自动转义已转义字符

这里是我怎么做的电话:

$params = new \stdClass(); 
$params->recipient = new \stdClass(); 
$params->recipient->name = "Some buyer"; 
$params->recipient->email = "[email protected]"; 
$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被称为它看起来如上所述。

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

回答

0

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

因此,更重要的是确保您以接收方需要的格式发送数据。如果您的数据具有HTML实体但接收方需要正常的非实体版本,那么html_entity_decode()数据。这与您在本地拨打电话相同,如果该本地方法不适用于实体,那么您最好先手动解码这些实体。

如果你正在编码,因为你知道它将被插入到XML中,那么你正在做一个额外的步骤,因为肥皂客户端已经为你做了这个。只要坚持任何需要从另一端出来的需求。