Hoofdmenu

Vreemde tekens - XML fout

Gestart door guillome, 15 december, 2016, 09:06:29

Vorige topic - Volgende topic

guillome

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?

guillome

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

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');

guillome

Super, ga ik dat doen.
Of kan het ook met <!CDDATA?

Guido

#4
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.

guillome

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

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>";

guillome

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

guillome

In samenwerking met Guido is het opgelost dmv url_encode op de xml string :)

erwin-burorader

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.