qbxml中的特殊字符

时间:2019-04-02 20:32:40

标签: php quickbooks

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

问题是我的字符串如下:
100瓦伦道夫– Ste.4-100

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

我尝试将这个破折号直接输入到quickbooks企业版(v19),并且可以正常工作。 我不确定这里发生了什么。如何在qbxml内提交此破折号,以便快速簿可以接受它。

2 个答案:

答案 0 :(得分:1)

您必须对特殊字符进行编码才能将其发送到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);

根据此处的示例:

答案 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

我过去已经使用过很多次,它们对于大多数特殊字符等都非常有效。

干杯。