最近几天,我注意到,即使qbxml验证程序说xml有效,Quickbooks也不会接受破折号。
问题是我的字符串如下:
100瓦伦道夫– Ste.4-100
当我尝试使用php devkit迁移此客户时,出现以下问题:
QuickBooks在解析提供的XML文本流时发现错误
我尝试将这个破折号直接输入到quickbooks企业版(v19),并且可以正常工作。
我不确定这里发生了什么。如何在qbxml内提交此破折号,以便快速簿可以接受它。
答案 0 :(得分:1)
您必须对特殊字符进行编码才能将其发送到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);
根据此处的示例:
答案 1 :(得分:1)
您可以使用CDATA,
这些是您可能会看到的奇怪标签:
<Name><![CDATA[1234567 Steel Décor]]></Name>
Cdata基本上是指字符数据,通常是一种将诸如HTML和其他特殊字符之类的内容放入XML文件的方法。它告诉XML解析器忽略此内容,并将其视为纯文本(基本上)
这里是指向Wiki页面的链接,其中包含更多详细信息,然后我会键入诸如它的历史记录之类的信息。
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
我过去已经使用过很多次,它们对于大多数特殊字符等都非常有效。
干杯。