最近几天我注意到,即使qbxml验证器说xml有效,Quickbooks也不接受em dash。
问题是我有一个如下字符串: 100 W. Randolph - Ste.4-100 当我尝试使用php devkit迁移此客户时,我遇到了这个问题: 解析提供的XML文本流时,QuickBooks发现错误 我试图将这个em dash直接输入到quickbooks企业(v19)并且它有效。我不确定这里发生了什么。如何在qbxml中提交此em破折号,以便quickbooks可以接受它。
你可以使用CDATA,
这些是您可能看到的奇怪标签:
<Name><![CDATA[1234567 Steel Décor]]></Name>
Cdata基本上是指字符数据,通常是将HTML和其他特殊字符放在XML文件中的方法。它告诉XML解析器忽略此内容并将其视为纯文本(基本上)
这是一个指向维基页面的链接,其中包含更多详细信息,然后我会关注它的历史等。
https://en.wikipedia.org/wiki/CDATA
在XML文档或外部解析实体中,CDATA部分是元素内容的一部分,标记为解析器纯粹解释为文本数据,而不是标记。
如果使用XMLWriter库来创建XML,则有两个专门用于此的函数:
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
我过去曾经多次使用它们,它们对大多数特殊角色等都很有效...
干杯。
您必须编码特殊字符才能将它们发送到QuickBooks。例如如果你想发送这个:
<Name>1234567 Steel Décor</Name>
<CompanyName>Steel Décor</CompanyName>
你需要发送这个:
<Name>1234567 Steel Décor</Name>
<CompanyName>Steel Décor</CompanyName>
如果你正在使用这个PHP库:
然后你可以做这样的事情:
$encoded = QuickBooks_Cast::cast(QUICKBOOKS_ADD_CUSTOMER, 'FullName', $raw);
按照这里的例子: