Problem mit XML und Umlauten
Hey Leute
Ich habe irgendwie ein Problem mit Umlauten, wenn ich sie in eine XML speichere.
Jedesmal wenn ich einen Umlaut wie z.B.: "ö" "Ö" "ü" "Ü" "ä" "Ä"
in meine XML Speichere, dann zerschießt der mir die gesamte XML.
Wie Codiere ich die XML, dass der das mal sein lässt und die brav speichert?
Ich codiere die im Moment mit "utf-8", habe aber schon eine andere Codierung (ISO-8859-1) durchprobiert und s auch uncodiert gelassen, brachte aber nichts...
Ich dachte das würde alles abdecken.....
Sorry, wenn das ne dumme Frage ist, ich hab mir Programmierung eigentlich nur für meine Website selbst beigebracht.
Wo könnte nun mein Fehler liegen?
Der Code (mit den Umlauten) wird mit einer einfachen Form mittels PHP in die XML gespeichert.
Ich habe irgendwie ein Problem mit Umlauten, wenn ich sie in eine XML speichere.
Jedesmal wenn ich einen Umlaut wie z.B.: "ö" "Ö" "ü" "Ü" "ä" "Ä"
in meine XML Speichere, dann zerschießt der mir die gesamte XML.
Wie Codiere ich die XML, dass der das mal sein lässt und die brav speichert?
Ich codiere die im Moment mit "utf-8", habe aber schon eine andere Codierung (ISO-8859-1) durchprobiert und s auch uncodiert gelassen, brachte aber nichts...
Ich dachte das würde alles abdecken.....
Sorry, wenn das ne dumme Frage ist, ich hab mir Programmierung eigentlich nur für meine Website selbst beigebracht.
Wo könnte nun mein Fehler liegen?
Der Code (mit den Umlauten) wird mit einer einfachen Form mittels PHP in die XML gespeichert.
Wenn du UTF-8 im Header angibst, hast du sie auch als UTF-8 abgespeichert?
UbuntuSource - Aktuelle News und Howto's rund um Ubuntu!
Für Umlaute gibt es in HTML auch spezielle Zeichen:
![]()
HTML
1 ä ä Ä Ä ö ö Ö Ö ü ü Ü Ü ß ß
das es hier um XML geht ist dir klar ?;>
@zhaang
wie genau speicherst du denn die daten ab also als was nodeValues attributes ?? nen teil des Codes wäre halt gut und was du mit "zerschießt" meinst also was beim auslesen passiert ?;>
mfg LA
Hey Lorenz
Das "Zerschießen" passiert leider nicht beim auslesen , sondern beim speichern.
Im Prinzip wird der gesammte Dateiinhalt gelöscht, sobald ich da einen Umlaut reinspeichere.
Oder mit der Methode des "Variable vorher als UTF-8 encoden" wird das falsche Sonderzeichen gespeichert.
Hier der Schnipsel , den ich zum speichern verwende, nachdem ich die Datei geladen habe:
Das "Zerschießen" passiert leider nicht beim auslesen , sondern beim speichern.
Im Prinzip wird der gesammte Dateiinhalt gelöscht, sobald ich da einen Umlaut reinspeichere.
Oder mit der Methode des "Variable vorher als UTF-8 encoden" wird das falsche Sonderzeichen gespeichert.
Hier der Schnipsel , den ich zum speichern verwende, nachdem ich die Datei geladen habe:
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// access and remove child element
$item = $root->getElementsByTagName($tag)->item(0);
$root->removeChild($item);
//create child element
$item = $dom->createElement($tag);
$root->appendChild($item);
// create text node
$text = $dom->createTextNode($tagcontent);
$item->appendChild($text);
// save tree to file
$test = $dom->save($path);
|
mh aus dem stück code kann ich nicht so wirklich viel sehen
wie zb der parser aufgerufen wurde und in wie weit du das encoding auf utf8 eingestellt hast
möglich ist auch das php Probleme hast wen BOM nicht das ist
ich weiß ja auch nicht in wie weit du Erfahrung mit xml hast ich kann dir wärmstens SimpleXML ans Herz legen das ist wesentlich leichter zu handhaben
http://php.net/manual/en/book.simplexml.php
mfg LA
wie zb der parser aufgerufen wurde und in wie weit du das encoding auf utf8 eingestellt hast

möglich ist auch das php Probleme hast wen BOM nicht das ist
ich weiß ja auch nicht in wie weit du Erfahrung mit xml hast ich kann dir wärmstens SimpleXML ans Herz legen das ist wesentlich leichter zu handhaben

http://php.net/manual/en/book.simplexml.php
mfg LA
UTF-8 habe ich in dem XML Document das ich lade angegeben.
Ungefähr so:
<?xml version="1.0" encoding="UTF-8"?>
Und der Code kommt vom einer Form.
Mach ich dann nicht das hier: $variable = utf8_encode($variable);
dann zerschießt das mir alles, mache ich das, dann bekomme ich die falschen Sonderzeichen gespeichert.
So speichere ich(ungefähr):
Würde das Problem durch Umstellung auf Simple-XML gelöst werden, würde ich es eventuell machen, allerdings gibts keinen Grund dafür, warum das dann da funktionieren sollte.
Ausserdem müsste das ja auch so möglich sein.
Ich weiß nicht was dieser Satz aussagen soll.
Ungefähr so:
<?xml version="1.0" encoding="UTF-8"?>
Und der Code kommt vom einer Form.
Mach ich dann nicht das hier: $variable = utf8_encode($variable);
dann zerschießt das mir alles, mache ich das, dann bekomme ich die falschen Sonderzeichen gespeichert.
So speichere ich(ungefähr):
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
$dom = new DomDocument;
$dom->Load($path);
$root = $dom->getElementsByTagName("profil")->item(0);
$dom->formatOutput=true;
// access and remove child element
$item = $root->getElementsByTagName($tag)->item(0);
$root->removeChild($item);
//create child element
$item = $dom->createElement($tag);
$root->appendChild($item);
// create text node
$text = $dom->createTextNode($tagcontent);
$item->appendChild($text);
// save tree to file
$test = $dom->save($path);
|
Würde das Problem durch Umstellung auf Simple-XML gelöst werden, würde ich es eventuell machen, allerdings gibts keinen Grund dafür, warum das dann da funktionieren sollte.
Ausserdem müsste das ja auch so möglich sein.
Zitat
möglich ist auch das php Probleme hast wen BOM nicht das ist
Ich weiß nicht was dieser Satz aussagen soll.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »zhaang« (16. März 2011, 22:41)
Macht nichts, funktioniert trotzdem einwandfrei wenn nur die Inhalte so umgewandelt werden. Nutze ich manchmal auch so wenn Webservices fragwürdig umgesetzt wurden.
Für Umlaute gibt es in HTML auch spezielle Zeichen:
![]()
HTML
1 ä ä Ä Ä ö ö Ö Ö ü ü Ü Ü ß ß
das es hier um XML geht ist dir klar ?;>
nyuuu
Macht nichts, funktioniert trotzdem einwandfrei wenn nur die Inhalte so umgewandelt werden. Nutze ich manchmal auch so wenn Webservices fragwürdig umgesetzt wurden.
ju klar kann man das machen nur ist das eher eine Richtung die man nicht gehen sollte wenn man nicht gerad vielleicht in Zeitdruck steckt oder an dem Projekt schon an irgend einer anderen Stelle gefuscht wurde das es nicht anders geht.
Bei PHP habe ich nichts angegeben, was dann doch dachte ich automatisch "UTF-8" wäre?!?
Oder wie meinst du das mit "PHP in UTF-8 gespeichert?
Bei XML habe ich sicherheitshalber wie schon geschrieben UTF-8 encoded, obwohl das da eigentlich ja ohne Angabe schon UTF-8 sein müsste....
Ich habe an den Anfang der PHP Dateien folgendes gesetzt:
header("Content-Type: text/html; charset=utf-8");
Dann müsste der ganze Kram doch theoretisch UTF-8 sein, oder?
Oder wie meinst du das mit "PHP in UTF-8 gespeichert?
Bei XML habe ich sicherheitshalber wie schon geschrieben UTF-8 encoded, obwohl das da eigentlich ja ohne Angabe schon UTF-8 sein müsste....
Ich habe an den Anfang der PHP Dateien folgendes gesetzt:
header("Content-Type: text/html; charset=utf-8");
Dann müsste der ganze Kram doch theoretisch UTF-8 sein, oder?
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »zhaang« (16. März 2011, 23:30)
in deinem Editor ob da auch beides auf utf-8 eingestellt ist ich sehe da wie gesagt keinen fehler habs eben sogar selber mal bei mir hier getestet
ttr.xml
=>
|
|
PHP-Quelltext |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php
$path = "ttr.xml";
$tag = "ttr";
$tagcontent = "ä ö ü i ";
$dom = new DomDocument;
$dom->Load($path);
$root = $dom->getElementsByTagName("profil")->item(0);
$dom->formatOutput=true;
// access and remove child element
$item = $root->getElementsByTagName($tag)->item(0);
$root->removeChild($item);
//create child element
$item = $dom->createElement($tag);
$root->appendChild($item);
// create text node
$text = $dom->createTextNode($tagcontent);
$item->appendChild($text);
// save tree to file
$test = $dom->save($path);
?>
|
ttr.xml
|
|
Quellcode |
1 2 3 4 |
<?xml version="1.0" encoding="UTF-8"?> <root> <profil><ttr>test</ttr></profil> </root> |
=>
|
|
Quellcode |
1 2 3 4 |
<?xml version="1.0" encoding="UTF-8"?> <root> <profil><ttr>ä ö ü i </ttr></profil> </root> |
wie stelle ich das denn auf utf-8 ein?
Mir gehen langsam die Ideen aus.
OMG
Ich hab den Fehler endlich gefunden!!!!
Das ganze ist ein Teil von meinem Geocoding und speichert quasi eine Adresse und ich hatte jedesmal voll Probleme wenn "Köln" oder "Mönchengladbach" als Adresse gespeichert wurden.
Das war schon alles richtig codiert, aber ich schleife das immer wegen dem Geocoding durch eine komplett andere Datei durch, die ich total vergessen hatte, das die in dem Kreislauf mit drin ist (zwecks geocoding) und übergebe in dieser Datei auch eigentlich nur die Werte 1:1.
Aber diese Datei war noch auf Unfug codiert, keine Ahnung warum.
Danke auf jedenfall für die Hilfe und das checken des Codes.
Hat mir auf jeden Fall geholfen, dass ich die ganzen genannten Fehler ausschließen konnte.
Mir gehen langsam die Ideen aus.
OMG
Ich hab den Fehler endlich gefunden!!!!
Das ganze ist ein Teil von meinem Geocoding und speichert quasi eine Adresse und ich hatte jedesmal voll Probleme wenn "Köln" oder "Mönchengladbach" als Adresse gespeichert wurden.
Das war schon alles richtig codiert, aber ich schleife das immer wegen dem Geocoding durch eine komplett andere Datei durch, die ich total vergessen hatte, das die in dem Kreislauf mit drin ist (zwecks geocoding) und übergebe in dieser Datei auch eigentlich nur die Werte 1:1.
Aber diese Datei war noch auf Unfug codiert, keine Ahnung warum.
Danke auf jedenfall für die Hilfe und das checken des Codes.
Hat mir auf jeden Fall geholfen, dass ich die ganzen genannten Fehler ausschließen konnte.
in deinem editor wo das genau ist kann ich natürlich nicht sagen musst du mal nach encoding oder vielleicht auch utf8 in der hilfe suchen 
aber mich wundert halt auch das php dir kein fehler ausgibt normal sollte er wenn die datei falsch codiert ist nen fehler ausgeben . kannst du mal einfach nur den code den ich oben gepostet habe testen und noch in der ersten zeile hinter <?php
einfügen?
und sagen was für ein fehler kommt bzw was passiert
mfg LA

aber mich wundert halt auch das php dir kein fehler ausgibt normal sollte er wenn die datei falsch codiert ist nen fehler ausgeben . kannst du mal einfach nur den code den ich oben gepostet habe testen und noch in der ersten zeile hinter <?php
|
|
Quellcode |
1 |
error_reporting(2147483647); |
einfügen?
und sagen was für ein fehler kommt bzw was passiert
mfg LA
Ähnliche Themen
-
Domains »-
Domainbewertung
(13. Oktober 2010, 02:38)
-
Domains »-
IDN's (Domain mit Umlauten)
(13. Februar 2004, 15:17)
-
Foren-, Blog- und Content-Managementsysteme »-
[WBB1.2] Probleme mit Umlauten und Sonderzeichen
(27. Dezember 2007, 10:37)
-
Datenbanken »-
SELECT * FROM tbl WHERE name LIKE 'ü%' gibt mir auch Namen mit "Y" aus?!
(2. Januar 2007, 15:39)
-
Domains »-
Neue Domains mit Umlauten?
(6. April 2003, 16:04)


