2016-03-02 3 views
0

Я использую API Zoho для ввода вложений в CRM.Ошибка с амперсандом в XML в Zoho API

Все работает отлично, за исключением, когда один из полей содержит амперсанд, в этом случае ответ от Zoho это:

<?xml version="1.0" encoding="UTF-8" ?> 
<response uri="/crm/private/xml/Leads/insertRecords"> 
    <error> 
    <code>4835</code> 
    <message>Unable to parse XML data</message> 
    </error> 
</response> 

Я попытался следующие полезные нагрузки без какого-либо успеха:

1/

<Leads> 
    <row no="1"> 
     <FL val="Lead Owner">[email protected]</FL> 
     <FL val="Company">Marks & Spencer</FL> 
    </row> 
</Leads> 

2/

<Leads> 
    <row no="1"> 
     <FL val="Lead Owner">[email protected]</FL> 
     <FL val="Company">Marks &amp; Spencer</FL> 
    </row> 
</Leads> 

3/

<Leads> 
    <row no="1"> 
     <FL val="Lead Owner">[email protected]</FL> 
     <FL val="Company">Marks &#038; Spencer</FL> 
    </row> 
</Leads> 

4/

<Leads> 
    <row no="1"> 
     <FL val="Lead Owner">[email protected]</FL> 
     <FL val="Company"><![CDATA[Marks &amp; Spencer]]></FL> 
    </row> 
</Leads> 

Я даже испытания, заменив амперсанд на %26, как сообщил об этом Zoho forum thread, но не повезло.

Каков правильный формат кодирования амперсандов для запросов Zoho?

+0

Немного абсурдный, но, пожалуйста, попробуйте & amp; ? Возможна двойная рендеринг. –

+1

Спасибо @ AndrásHummer! Я наконец нашел решение этой проблемы (см. Ниже) –

ответ

1

Наконец нашел решение: строки, содержащие специальные символы должны содержаться в CDATA разделах И этих специальных символов должен быть percent encoded.

Таким образом, для приведенного выше примера, это дает:

<Leads> 
    <row no="1"> 
     <FL val="Lead Owner">[email protected]</FL> 
     <FL val="Company"><![CDATA[Marks %26 Spencer]]></FL> 
    </row> 
</Leads> 

Обратите внимание, что значение Marks%20%26%20Spencer также хорошо для API.

+1

Удивительный! Не забудьте отметить его как решение! –

+0

Это не работает больше или, по крайней мере, не последовательно. Я тестировал данные с 4 амперсандами, а остальная часть сообщения отключена от 2-го CDATA. – juminoz