每当我的公司名称中出现& (ampersand)
时,就会抛出错误Unable to parse XML data
XML数据:
$xmlData = '<Leads>
<row no="1">
<FL val="Company"><![CDATA[ .$company. ]]></FL>
</row>
</Leads>';
$company = isset($company) && !empty($company) ? str_replace('&', '&', $company) : 'None';
我尝试将&
替换为&
,%26
etc
并使用了CDATA,但没有任何效果。
XML似乎仍然有效,但它会抛出错误
<Leads><row no="1"><FL val="Company">test & test</FL></row></Leads>
使用CDATA:
<Leads><row no="1"><FL val="Company"><![CDATA[test & test]]></FL></row></Leads>
它的解决方案是什么?
P.S:我将这个xml数据发送到zoho CRM。 Zoho not accepting company name with & in it.
更新1:
这是将xml数据发送到zoho的URL以及何时获取&amp;它不起作用。
https://crm.zoho.com/crm/private/xml/Leads/insertRecords?newFormat=1&authtoken=authtoken &xmlData=<Leads><row no="1"><FL val="Company">test & test</FL></row></Leads>
OR
https://crm.zoho.com/crm/private/xml/Leads/insertRecords?newFormat=1&authtoken=authtoken &xmlData=<Leads><row no="1"><FL val="Company">test & test</FL></row></Leads>
使用&
它应该有效,但它不会。 :(
答案 0 :(得分:1)
如果您将此作为GET请求发送,则还需要转义网址中的&
。一般来说,最好使用特定于格式的匹配API /函数,而不仅仅是字符串。
$document = new DOMDocument();
$row = $document
->appendChild($document->createElement('Leads'))
->appendChild($document->createElement('row'));
$row->setAttribute('no', '1');
$FL = $row->appendChild($document->createElement('FL'));
$FL->setAttribute('val', 'Company');
$FL->appendChild($document->createTextNode('Foo & Bar'));
$xml = $document->saveXml($document->documentElement);
var_dump($xml);
$url = 'https://crm.zoho.com/crm/private/xml/Leads/insertRecords?'.
http_build_query(
[
'newFormat' => 1,
'authtoken' => 'abc1234',
'xmlData' => $xml
]
);
echo $url;
输出:
string(69) "<Leads><row no="1"><FL val="Company">Foo & Bar</FL></row></Leads>"
https://crm.zoho.com/crm/private/xml/Leads/insertRecords?newFormat=1&authtoken=abc1234&xmlData=%3CLeads%3E%3Crow+no%3D%221%22%3E%3CFL+val%3D%22Company%22%3EFoo+%26amp%3B+Bar%3C%2FFL%3E%3C%2Frow%3E%3C%2FLeads%3E
当然,ZOHO CRM可能不接受其中包含&
的公司名称。