2014-09-30 59 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中,那麼你正在做一個額外的步驟,因爲肥皂客戶端已經爲你做了這個。只要堅持任何需要從另一端出來的需求。