Ik ben nu al onderhalf week aan het proberen om unicode xml files te maken met php en dit lukt niet.

Wat er moet komen is een stukje php code waarmee ik xml files kan uitlezen en mogelijk ook opbouwen, daarnaast moet die xml file utf-8 encoded zijn zodat er ook andere talen in voor kan komen dan de standaard westerse talen.
(het uitlezen en schrijven van bestanden is niet nieuw voor me, maar om het zo weg te schrijven dat je er ook russies of iets dergelijks leesbaar blijft wel)

De enige manier waarop ik dit mogelijk heb gekregen is een xml bestand aanmaken onder windows en gevult met wat russiese tekst en daarna opgeslagen als utf-8 encoded bestand (als je dit niet doet dan maakt windows er standaard een ascii file van en dan verandere alle 'vreemde' karakters in '??'.

Nou heb ik de xml libs van php geprobeert om daarmee een file te maken maar dit heeft geen succes (ook niet als de file in binary mode gemaakt word).
Het punt is denk ik meer dat de source file (vb. test.php) de tekens al naar ?? heeft omgezet, nou dacht ik dan maak ik eerst in windows een utf-8 encoded file en upload die en dan werkt het wel, niet dus, resultaat blijft ??.

Ik denk dat ik nu zo'n beetje alles geprobeert heb wat ik heb kunnen vinden op internet.

Heeft iemand hier een idee hoe ik dit werkend kan krijgen?
Zo uit de handleiding:
<?php
$dom = new DOMDocument('1.0', 'utf-8');

echo $dom->saveXML(); // <?xml version="1.0" encoding="utf-8"?>
?>
Nog veel eenvoudiger kan het niet worden.
pgFrank schreef op 29.05.2008 12:14
Zo uit de handleiding:
<?php
$dom = new DOMDocument('1.0', 'utf-8');

echo $dom->saveXML(); // <?xml version="1.0" encoding="utf-8"?>
?>
Nog veel eenvoudiger kan het niet worden.


Jah dat zou je wel denken jah, maar toen ik het teste werkte het niet.
<?php
$dom = new DOMDocument('1.0', 'utf-8');
$element = $dom->createElement('russian', '&#1056;&#1091;&#1089;&#1089;&#1082;&#1080;&#1081; &#1103;&#1079;&#1099;&#1082; Russkiy yazyk');
$dom->appendChild($element);
echo $dom->saveXML();
?>

output is dan gewoon ??????? ???? Russkiy yazyk

edit: in de code heb ik dan wel letterlijk de russies text staan, ik zie dat ze bij het posten omgezet zijn naar unicode

&#1048;&#1084;&#1077;&#1077;&#1090; &#1083;&#1080; &#1089;&#1084;&#1099;&#1089;&#1083; &#1075;&#1086;&#1074;&#1086;&#1088;&#1080;&#1090;&#1100; &#1086; &#1089;&#1086;&#1090;&#1088;&#1091;&#1076;&#1085;&#1080;&#1095;&#1077;&#1089;&#1090;&#1074;&#1077;
Tja, geen idee wat je dan fout doet, hier werkt het prima:

<?xml version="1.0" encoding="utf-8"?>
<russian>&#1056;&#1091;&#1089;&#1089;&#1082;&#1080;&#1081; &#1103;&#1079;&#1099;&#1082; Russkiy yazyk</russian>


Edit: Hier op phphulp.nl wordt de output echter niet correct weergegeven... Da's dan weer jammer.
Je heb niet allemaal wijzigingen gemaakt in je php.ini?
en met welke versie php werk jij? ik werk met PHP Version 5.2.6 RC4-pl0-gentoo
Nee, geen enkele wijziging gemaakt, gewoon copy-paste en vervolgens uitvoeren. Getest op de OSX 10.4, werkt al sinds jaar en dag uitstekend.

Ik heb zelfs geen idee wat ik in php.ini zou moeten aanpassen om XML en/of utf8 aan de praat te krijgen, het werkt gewoon.
Zou je aan pagina kunnen aanmaken met alleen phpinfo() erop zodat ik jou instellingen kan vergelijken met de mijne?
Ik ben der uit, ben der achter gekomen dat het niet aan de code ligt maar aan mijn editor..

Ik had al ingedachte dat het php bestand utf-8 encoded moest zijn, dus ik maakte die onder windows aan en uploade die, maar zodra je er een aanpassing in maakt en opslaat overschrijft hij het met de default encoding van Zend Studio, en deze stond ingesteld op default (met andere woorden ASCII) nu ik deze heb gewijzigt naar utf-8 werkt het allemaal.

Reageren