audunr Skrevet 21. mai 2005 Del Skrevet 21. mai 2005 Har laget et script som tar input fra et skjema og lagrer det til en XML-fil. All HTML er i ISO-8859-1, det samme er XML-filene. DOM bruker UTF-8 internt for XML. Problemet er at alle HTML-tegn blir til HTML-entities i XML-filen når jeg lagrer. Altså: <a href="http://www.studvest.no/">Studvest</a><br/> Og ikke: <a href="http://www.studvest.no/">Studvest</a><br/> Dette er altså dataene som er lagret i en node med navn "options". XML-tagene er OK, altså med <, > og / i orden. Her er koden, har forsøkt å kommentere så mye som mulig. // Last inn XML-en fra en streng lagret i $_SESSION // XML-en er OK etter dette $xml = DOMDocument::loadXML($_SESSION["Template"][$_SESSION["ActiveTemplate"]]); $xml->formatOutput = true; // Denne er kanskje litt vanskelig å skjønne... // Men basically, den endrer innholdet i <options></options> til noe nytt. Det er funksjonen ModuleUpdateElement() som returnerer en tekststreng, som blir konvertert fra ISO-8859-1 til UTF-8, da XML er UTF-8 internt. Uten mb_convert_encoding() får jeg feilmeldinger når det er æøå eller lignende i koden. // XML-en er OK også etter denne neste linjen $xml->getElementsByTagName($_POST["Position"])->item(0)->getElementsByTagName("module")->item($_POST["XMLID"])->getElementsByTagName("options")->item(0)->nodeValue = mb_convert_encoding(ModuleUpdateElement(), "UTF-8", "ISO-8859-1"); // Lagre den nye XMLen tilbake til $_SESSION. Etter dette er innholdet i <options> som nevnt over, altså med html-entities i stedet for < > / og så videre. $_SESSION["Template"][$_SESSION["ActiveTemplate"]] = $xml->saveXML(); Det finnes jo funksjoner for å decode HTML-entities til vanlige tegn, men det virker litt tungvint. Noen forslag? Her er et utdrag av XML-filen: <?xml version="1.0" encoding="iso-8859-1"?> <body> <header> </header> <meta> </meta> <title> <module active="1"> <id>3</id> <options>Tittel</options> </module> </title> </body> MVH Audun Lenke til kommentar
Drømmemannen Skrevet 21. mai 2005 Del Skrevet 21. mai 2005 Problemet med å ha <a ...>...</a> som ren tekst i en xml-fil er jo at det interfererer med xml-en. Hvordan forventer du at parseren skal tolke det? Tror ikke du kommer utenom at < og > blir oversatt. Lenke til kommentar
phanti Skrevet 21. mai 2005 Del Skrevet 21. mai 2005 Du må nok omgjøre html-tagene til tegn, og så gjøre en utf-8-code og decode, om du skjønner hva jeg mener. Lenke til kommentar
audunr Skrevet 21. mai 2005 Forfatter Del Skrevet 21. mai 2005 (endret) Med SimpleXML kan man bruke $Node->asXML() og få ut hele noden, dvs med <options></options> rundt innholdet, uten at den bryr seg om hva som er inni. Så er det bare å bruke en regex eller lignende for å fjerne det som er rundt og få ut innholdet. Hvis jeg lager XML-filene manuelt, og lagrer slik jeg vil det skal lagres, er det ikke noe problem med ovennevnte metode. Slik det er nå kan jeg selvfølgelig hente ut HTML-en slik den er, med HTML-entities, og oversette til rett kode, men XMLen blir veldig vanskelig å lese (for vanlige mennesker) når HTMLen er full av entities. Bruker DOM for å redigere XMLen, SimpleXML der det er hensiktsmessig for å hente ut innhold. MVH Audun Endret 21. mai 2005 av audunr 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å