Acumulus Forum

Voor leden en niet-leden (openbaar) => Webkoppelingen => Topic gestart door: guillome op 15 december, 2016, 09:06:29

Titel: Vreemde tekens - XML fout
Bericht door: guillome 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?
Titel: Re: Vreemde tekens - XML fout
Bericht door: guillome 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>
Titel: Re: Vreemde tekens - XML fout
Bericht door: Guido 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');
Titel: Re: Vreemde tekens - XML fout
Bericht door: guillome op 15 december, 2016, 09:30:21
Super, ga ik dat doen.
Of kan het ook met <!CDDATA?
Titel: Re: Vreemde tekens - XML fout
Bericht door: Guido 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.
Titel: Re: Vreemde tekens - XML fout
Bericht door: guillome 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
Titel: Re: Vreemde tekens - XML fout
Bericht door: Guido 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>";
Titel: Re: Vreemde tekens - XML fout
Bericht door: guillome 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
Titel: Re: Vreemde tekens - XML fout
Bericht door: guillome op 15 december, 2016, 12:53:57
In samenwerking met Guido is het opgelost dmv url_encode op de xml string :)
Titel: Re: Vreemde tekens - XML fout
Bericht door: erwin-burorader 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.