Umlautkonvertierung in Flash und php (z.B. für xml) geschrieben am 27.07.2008
Wenn mit Flash und php gearbeitet wird, stellt man in kurzer Zeit fest, dass das en- und decoden von Umlauten unterschiedlich funktioniert.Solange man in Flash bleibt ist es kein Problem, da schreibt man die Daten einfach weg (z.B: in eine xml-Datei). Sollen diese Daten aber auch in HTML-Formularen bearbeitet werden treten da kleine Probleme auf.
Möchte man von Flash nach php etwas abschicken nutzt man im allgemeinen folgenden Code (AS2):
ActionScript
var savevar=new LoadVars();
//Text aus Textfeld auslesen und escapen
savevar.name=escape(eingabetxt.text);
savevar.message=escape(eingabemsg.text);
//per post an go.php absenden
savevar.sendAndLoad("go.php",savevar,"POST");
Lässt man in Flash nun als Name Jörg escapen kommt dabei J%C3%B6rg heraus.Würde man das in php die verschiedenen Decodierungen ausprobieren, käme folgendes heraus:
Eingang=J%C3%B6rg
urldecode=Jörg
rawurldecode=Jörg
utf8_decode=J%C3%B6rg
also alles nichts.
Auf der suche durch diverse Foren bin ich auf diese Lösung gestoßen:
php
$name=utf8_decode(urldecode($_POST["name"]));
hierbei wird erst mit urldecode dekodiert und dann nochmal mit utf8_decode und heraus kommt ein sauberer String den man für HTML-Ausgaben transformatieren kann.Der umgekerte Weg dazu ist
php
urlencode(utf8_encode($value));
//flash->php
utf8_decode(urldecode($value));
//php->flash
urlencode(utf8_encode($value));
Ließt man eine so erzeugte xml-Datei ein transformiert man in Flash mit unescape(wert) den Text zurück.