poande05 Skrevet 14. november 2011 Del Skrevet 14. november 2011 (endret) Hei. Jeg henter noe kommunale data og skal konvertere det til XML, for å øve meg litt i php. Men æøå blir ikke formatert skikkelig. <?php //åpne dokumentet for driftsbudsjett 2012 $handle = fopen("https://www.bergen.kommune.no/bk/multimedia/archive/00114/Datagrunnlag_drift__114176a.csv", "r"); //XML dom $dom = new DOMDocument('1,0', 'UTF-8'); $xmlRoot = $dom->createElement("xml"); $xmlRoot = $dom->appendChild($xmlRoot); //array til feltnavn $fieldNames = array(); //første linje inneholder felttitler, vi befinner oss i utgangspunktet på første linje, derfor setter vi en boolsk verdi her. $firstLineBool = true; //tar for seg hver linje i dokumentet while (($data = fgetcsv($handle, 5000, ",")) !== FALSE) { //for første linje lagrer vi alle feltnavn i en array if($firstLineBool) { //vi splitter linjen etter semikoloner $pieces = explode(";", $data[0]); //hver av delene fra linjen legger vi i feltnavn-arrayen vi definerte i begynnelsen. foreach($pieces as $piece) { //regex for å lage lovlige nodenavn $piece = preg_replace('/[^0-9a-z ]+/i', "", $piece); //hvis den begynner med et tall legg til en "a" foran (for man kan ikke begynne navnet på et element med et tall) if(is_numeric(substr($piece, 0, 1))) { $piece = "a" . $piece; } $fieldNames[] = $piece; } } else { //vi splitter linjen etter semikoloner $pieces = explode(";", $data[0]); //legger til et barn i xml-dokumentet vårt $entity = $dom->createElement("Post"); $entity = $xmlRoot->appendChild($entity); //for hver databit som nå ligger i $pieces lager vi et xml-element med dataene i, basert på feltnavnene vi fikk i første linje av dokumentet $whereInFieldNames = 0; foreach($pieces as $piece) { $element = $dom->createElement($fieldNames[$whereInFieldNames]); $element = $entity->appendChild($element); $content = $dom->createTextNode($piece); $element->appendChild($content); $whereInFieldNames++; } } $firstLineBool = false; } echo $dom->saveXML(); ?> Nå er utf-8 satt, om jeg setter ISO-8859-1, får jeg følgende output, det vil si det stopper på første "å": <br /> <b>Warning</b>: DOMDocument::saveXML() [<a href='domdocument.savexml'>domdocument.savexml</a>]: output conversion failed due to conv error, bytes 0xE5 0x64 0x73 0x6C in <b>C:\xampp\htdocs\test\kommbuds.php</b> on line <b>63</b><br /> <?xml version="1,0" encoding="ISO-8859-1"?> <xml><Post><Avdeling>1</Avdeling><AvdelingT>Byr kan det være på serversiden hos meg at jeg har problemer, eller er dette noe som er kjent? Endret 14. november 2011 av poande05 Lenke til kommentar
poande05 Skrevet 14. november 2011 Forfatter Del Skrevet 14. november 2011 Dette løser problemet: $content = $dom->createTextNode(utf8_encode($piece)); Håper det er til hjelp for noen. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå