qbxml中的特殊字符

Special characters inside qbxml

最近几天我注意到即使 qbxml 验证器说 xml 有效,Quickbooks 也不接受 em 破折号。

问题是我有如下字符串:
100 W. Randolph – Ste.4-100

当我尝试使用 php devkit 迁移此客户时,我遇到了这个问题:
QuickBooks 在解析提供的 XML 文本流时发现错误

我尝试将这个 em dash 直接输入到 quickbooks enterprise (v19) 并且它有效。 我不确定这里发生了什么。我如何在 qbxml 中提交这个 em dash 以便 quickbooks 可以接受它。

您必须对特殊字符进行编码才能将它们发送到 QuickBooks。例如如果您要发送此邮件:

<Name>1234567 Steel Décor</Name>
<CompanyName>Steel Décor</CompanyName>

您需要发送:

<Name>1234567 Steel D&#233;cor</Name>
<CompanyName>Steel D&#233;cor</CompanyName>

如果您正在使用这个 PHP 库:

然后你可以这样做:

$encoded = QuickBooks_Cast::cast(QUICKBOOKS_ADD_CUSTOMER, 'FullName', $raw);

根据此处的示例:

您可以使用 CDATA,

这些是您可能见过的奇怪标签:

<Name><![CDATA[1234567 Steel Décor]]></Name>

Cdata 基本上表示字符数据,通常是将 HTML 和其他特殊字符放入 XML 文件中的一种方式。它告诉 XML 解析器忽略此内容并将其视为纯文本(基本上)

这是一个 link 维基页面,其中包含更多详细信息,然后我想输入它的历史等。

https://en.wikipedia.org/wiki/CDATA

In an XML document or external parsed entity, a CDATA section is a section of element content that is marked for the parser to interpret purely as textual data, not as markup.

如果您使用 XMLWriter 库制作 XML 有 2 个函数专门用于此:

https://www.php.net/manual/en/ref.xmlwriter.php

更具体地说

https://www.php.net/manual/en/function.xmlwriter-start-cdata.php

https://www.php.net/manual/en/function.xmlwriter-end-cdata.php

我过去用过很多次,它们对大多数特殊字符等都非常有效...

干杯。