CakePHP & DIEVOLUTION Blog

CakePHP: Ajax mag nur UTF-8

 

Die schöne Welt der Encodings. Dort prügeln sich UTF-8, ISO-8859-1 und wie sie alle heißen um die Gunst des Programmierers. Gerade im deutschen Sprachraum ist die ISO-8859-1 Kodierung sehr beliebt. Plant man allerdings Ajax in seine Anwendung zu integrieren, sollte man lieber auf das Universal-Pferd UTF8 setzen.

Denn CakePHP sendet Ajax Requests standardmäßig mit UTF-8 ab. Will man also ein Formular via Ajax senden, werden all die schönen ISO-Umlaute nur noch als Kauderwelsch in der Datenbank gespeichert. Wäre dies nicht schon schlimm genug, so ist zudem auf die Rückgabe (definiert im Options Array als Update) ebenfalls im UTF-8 Format. Man könnte nun am Ajax Helper rumschrauben, so dass dieser ISO Requests sendet. Dies war zumindest mein erster Gedanke, bis ich von AD7Six im CakePHP Irc Channel (#cakephp auf freenode) belehrt wurde, dass es viel einfach wäre, einfach UTF8 zu benutzen.
Leider bedeutete dies: Alle Umlaute mussten von Hand neu gesetzt werden.

Fazit: UTF8 erspart viel Arbeit, wenn man es gleich von Beginn an einsetzt.


Veröffentlicht am Donnerstag, den 24. Januar 2008 um 09:57 Uhr veröffentlicht

Du kannst einen Kommentar schreiben, oder einen Trackback auf deiner Seite einrichten.

5 Reaktionen zu “CakePHP: Ajax mag nur UTF-8”

 

  1. Chris Am 24. Januar 2008 um 10:07 Uhr

    Ajax habe ich bislang noch nicht in cakephp angerührt, werde ich aber sicher mal in den nächsten Tagen, daher meine Frage: Meinst du man soll die komplette Seite, also auch die, die kein Ajax verwenden, als UTF-8 codiert ausgeben oder nur die Ajax Requests? Wenn es der erste Fall ist, wo gibts du die Codierung an, im Header der WEbsite oder gibts da bei Cakephp ein Konfigurationseinstellung?

  2. dievo Am 24. Januar 2008 um 10:20 Uhr

    Von gemischten Kodierungen halte ich nichts, da ja auch die Datenbank hinter der Webseite ebenfalls eine bestimmte Kodierung braucht. Ich hab in den sauren oder besser langweiligen Apfel gebissen und mir ein Eclipse Plugin runtergeladen, was mir alle Umlaute und Sonderzeichen, die nicht UTF-8 waren angezeigt hat und dann alle geändert. So habe ich eine konsistente UTF-8 Seite mit UTF-8 MySQL DB und brauch mir um die Kodierung keine Sorgen mehr zu machen.

    Wenn du nur für die Ajax Calls UTF-8 nimmst, wird beim Auslesen aus der DB ja UTF-8 wieder in ISO umgewandelt, was schief geht und man nur noch Fragezeichen oder schlimmeres bekommt.

    Aber vielleicht kennt ja jemand auch noch einen Weg, das Problem ganz anders zu lösen, wer weiß :-)

  3. Chris Am 24. Januar 2008 um 18:54 Uhr

    Ich hätte da noch eine Frage, zur Variablen “$Javascript”. Ich möchte ein JS-Script in den Header einbinden, aber die Variable $javascript wird nicht erkannt:

    Notice (8): Undefined variable: javascript [CORE/app/views/layouts/site_header.ctp, line 13]

    hat sich da was in Version 1.2 geändert oder muss ich die erst im Controller “einfügen”? Die Datei ist aber ein Layout und hat keinen Controller… (?)

  4. Chris Am 24. Januar 2008 um 20:28 Uhr

    Ah, hab die Lösung im Forum gefunden und war ganz einfach, man packt die Helper in den app_controller.
    Hab nun in jeder View auf die Helper zugriff, da ich zentral in der app_controller folgendes definiert habe:

    var $helpers = array(’Html’, ‘Form’,'Javascript’, ‘Ajax’ );

    Übrigens habe ich noch gelesen, dass man die Datei app_controller.php aus dem Cake Verzeichnis kopieren und die kopierte version dann in den ordner “app/controllers” legen sollte und nun nur noch diese version bearbeiten sollte. Hat das was mit einem Upgrade zu tun, damit man nicht ausversehen seine Daten überschreibt?

  5. paul Am 9. Februar 2008 um 18:42 Uhr

    mit

    SET NAMES oder SET CHARACTER SET

    in mysql statements lassen sich strings in andere zeichensätze überführen, allerdings ist der konsequente einsatz eines zeichensatzes sinnvoller.

Einen Kommentar schreiben