【问题标题】:PHP: How to fix error Unable to parse XML data? [duplicate]PHP:如何修复错误无法解析 XML 数据? [复制]
【发布时间】:2018-11-18 00:28:03
【问题描述】:

每当我在公司名称中获得& (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('&', '&amp;', $company) : 'None';

我尝试将 &amp;amp; 替换为 &amp;amp;%26 etc 并使用 CDATA,但没有任何效果。

XML 似乎仍然有效,但仍会引发错误

<Leads><row no="1"><FL val="Company">test &amp; 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 &amp; in it.

更新 1:

这是将 xml 数据发送到 zoho 的 URL,当它收到时它不起作用。

https://crm.zoho.com/crm/private/xml/Leads/insertRecords?newFormat=1&authtoken=authtoken&amp;xmlData=&lt;Leads&gt;&lt;row no="1"&gt;&lt;FL val="Company"&gt;test &amp;amp; test&lt;/FL&gt;&lt;/row&gt;&lt;/Leads&gt;

https://crm.zoho.com/crm/private/xml/Leads/insertRecords?newFormat=1&authtoken=authtoken&amp;xmlData=&lt;Leads&gt;&lt;row no="1"&gt;&lt;FL val="Company"&gt;test &amp; test&lt;/FL&gt;&lt;/row&gt;&lt;/Leads&gt;

&amp;amp; 应该可以工作,但不能。 :(

【问题讨论】:

    标签: php xml zoho


    【解决方案1】:

    如果您将此作为 GET 请求发送,您还需要转义 url 中的 &amp;。一般来说,使用特定于格式而不只是字符串的匹配 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 &amp; 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 可能不接受带有&amp; 的公司名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 2018-06-05
      • 1970-01-01
      • 2012-12-16
      • 1970-01-01
      • 2019-09-12
      • 2020-12-11
      相关资源
      最近更新 更多