Hallo Gast

Vreemde tekens - XML fout

  • 9 Reacties
  • 4023 Gelezen
Vreemde tekens - XML fout
« Gepost op: 15 december, 2016, 09:06:29 »
Beste,

Ik heb een paar orders met vreemde tekens. Een "&" bijvoorbeeld bij bedrijfsnaam of een รก in adres. Deze geven een XML-fout bij inschieten.
Hoe moet ik hiermee omgaan? htmlentities gebruiken?

Re: Vreemde tekens - XML fout
« Reactie #1 Gepost op: 15 december, 2016, 09:07:40 »
XML response:

<?xml version="1.0" encoding="UTF-8"?><response><errors><error><code>409</code><codetag>XML-INV02</codetag><message>Error - Bad Request - XML received but invalidated due to XML errors.</message></error><count_errors>1</count_errors></errors><status>1</status></response>

*

Guido

  • 2112
    • Bekijk profiel
Re: Vreemde tekens - XML fout
« Reactie #2 Gepost op: 15 december, 2016, 09:29:01 »
Je zult de 5 XML-control karakters naar XML1 moeten encoden. In php kan dit met htmlentities en de ENT_XML1 optie.

htmlentities($xmlvar, ENT_XML1, 'UTF-8');

Re: Vreemde tekens - XML fout
« Reactie #3 Gepost op: 15 december, 2016, 09:30:21 »
Super, ga ik dat doen.
Of kan het ook met <!CDDATA?

*

Guido

  • 2112
    • Bekijk profiel
Re: Vreemde tekens - XML fout
« Reactie #4 Gepost op: 15 december, 2016, 09:32:55 »
Helaas. De controlchars zullen XML1-compliant geescapet moeten worden. XML heeft het nodig om bijvoorbeeld duidelijk te zien of < en > bij de syntax van de XML-node horen of als &lt; of &gt; in de content van een XML-node.
« Laatst bewerkt op: 15 december, 2016, 09:34:49 door Guido »

Re: Vreemde tekens - XML fout
« Reactie #5 Gepost op: 15 december, 2016, 09:47:40 »
Blijkbaar doet PHP dat zelf al, want als ik het extra doe, maakt hij er dit van:
 &amp;amp;amp;

En zonder:
&amp;

Beide geven een XML fout

*

Guido

  • 2112
    • Bekijk profiel
Re: Vreemde tekens - XML fout
« Reactie #6 Gepost op: 15 december, 2016, 09:51:29 »
Dan ben je denk ik ergens al aan het encoden. Gebruik je misschien filter_var in PHP met een encode-optie of iets anders voordat je de xml-structuur opbouwt?

ik bedoel het volgende:
$naam = "Timmerman & Zonen";
$xmlnaam = htmlentities($naam, ENT_XML1, 'UTF-8');
$myxml = "<xml><naam><?=$xmlnaam;?></naam></myxml>";

Re: Vreemde tekens - XML fout
« Reactie #7 Gepost op: 15 december, 2016, 09:58:03 »
Ik gebruik DomDocument van PHP om het XML te genereren.

->appendChild(new \DOMText($value));Deze zet de waarde in XML.
Als ik niets encode, komt een & er uit als &amp; en dat lijkt me goed. Echter valt hij hier over.

Als ik jouw voorbeeld pak, toont ie ook &amp; :

<xml><naam>Timmerman &amp; Zonen</naam></myxml>

De XML die ik versturen wil stuur ik even per PM

Re: Vreemde tekens - XML fout
« Reactie #8 Gepost op: 15 december, 2016, 12:53:57 »
In samenwerking met Guido is het opgelost dmv url_encode op de xml string :)

Re: Vreemde tekens - XML fout
« Reactie #9 Gepost op: 15 december, 2016, 22:08:24 »
Ook al is het opgelost nu, misschien is het een idee om de gemeenschappelijke library van een aantal webwinkel koppelingen te gebruiken, met name de \Siel\Acumulus\Web namespace daarbinnen had je deze problemen kunnen besparen. Het betreft de koppelingen voor WooCommerce, PrestaShop, Magento, OpenCart, VirtueMart of HikaShop. Deze hebben dus allen een groot gemeenschappelijk gedeelte dat o.a. de communicatie verzorgt.