html_entities_decode oder htmlspecialchars_decode in Actionscript

23 Dez 2008
Erstellt von Martin Frericks
DruckversionDruckversionEinem Freund sendenEinem Freund sendenPDF-VersionPDF-Version

Bei meinen derzeitigen Gehversuchen, Datenbankabfragen per Actionscript zu steuern bin ich auf einige sehr interessante Methoden gestoßen.

Einmal das bereits in einem früheren Beitrag vorgestellte AMFPHP Framework. Mittlerweile benutze ich allerdings das Zend Framework, das von Adobe empfohlen wird und einige kleine Annehmlichkeiten bietet. Effektiv und intuitiv sind aber beide. Einfach eine Geschmacksfrage.

Das nächste Problem mit dem ich konfrontiert wurde waren HTML Entitäten. Die Flash Seite, an der ich arbeite basiert auf Drupal. Die Idee ist es, die komplette Seite mit Drupal zu verwalten und für das Frontend eine Flashoberfläche zu programmieren, die sich alle benötigten Inhalte aus der Datenbank zieht. Drupal formt allerdings bei Texteingaben alle Sonderzeichen in die entsprechenden HTML Entitäten um. Ein Ä wird z.B. ein &Auml; und ein ß wird ein &szlig;. Tippe ich also in meinen Drupal Verwaltungsbereich den Text "Heute möchte ich über die Straße gehen" ein, steht in der Datenbank nachher "<p>Heute m&ouml;chte ich &uuml;ber die Stra&szlig;e gehen</p>".

Wenn man diese Zeile dann später wieder ausliest, ist jeder Browser natürlich in der Lage diese Entitäten wieder umzuwandeln und richtig darzustellen. Der htmlText eines dynamischen Textfeldes in Flash scheint das aber nicht zu können...

Zuerst habe ich versucht direkt nach dem Auslesen der Daten durch mein PHP Skript  (noch vor dem return und der Übergabe der Daten an Flash) mit html_entity_decode() die Daten wieder umzuwandeln. Leider bekommt man dann nur Kästchen und Fragezeichen an Stelle der Umlaute angezeigt. Einzige Möglichkeit: Die HTML Entitäten an Flash übergeben und vor der Ausgabe im Textfeld mit einer kleinen Actionscript Funktion umwandeln.

Hier ist der Code. Hoffe es erspart euch einige rastlose Stunden :)

function decodeEntities(input) {
    var string:String = input.toString();
    var entity:Array = new Array('&uuml;', '&Uuml;', '&auml;', '&Auml;', '&szlig;');
    var entityDecode:Array = new Array('ü', 'Ü', 'ä', 'Ä', 'ß');
    for (var i=0; i<entity.length; i++) {
        string = string.split(entity[i]).join(entityDecode[i]);
    }
    return string;
}

Die Arrays entity und entityDecode müsst ihr dann natürlich entsprechend mit den Characteren füllen um die es geht. Wer sich ein wenig Mühe machen möchte, bekommt eine vollständige Liste hier: http://unicode.e-workers.de/entities.php. Die komplette Funktion hätte ich dann natürlich auch gerne :)