Ajax-Request: Daten mit Umlaute veschwinden

Gesperrt
NobodyBody
Beiträge: 80
Registriert: Di 14. Sep 2004, 08:14
Kontaktdaten:

Ajax-Request: Daten mit Umlaute veschwinden

Beitrag von NobodyBody » So 23. Nov 2008, 12:05

Hallo,

bin dabei mir ein Plugin mit Ajax unterstützung zu basteln.
Dabei wird beim Klick die Daten (Tabelle, Formular, ...) per Ajax neu angefordert,

Code: Alles auswählen

var dataRefresh = function(link)
    {
        var mAjax = new Ajax.Request(
            link,
            {
                onComplete:dataResponse,
                onFailure:dataError,
                onLoading:function()
                {
                    $("info").show();
                }
            }
        ); 
}
in PHP in ein Array geschrieben,

Code: Alles auswählen

$aOutputs[] = array(...)
mit json umgewandelt und an den Client geschickt,

Code: Alles auswählen

print(json_encode($aOutputs));
und auf der HP aktualisiert

Code: Alles auswählen

var dataResponse = function(r)
{
  
    var data = r.responseText.evalJSON(); 
    
    for (var i = 0; i < data.length; ++i)
	{
		$(data[i].sektion).innerHTML= data[i].code;
	}
	
	$("info").hide();
}
Das Funktioniert alles so wie ich mir das vorstelle, ja bis ein Umlaut kommt :twisted:

wenn ich mir mein Array mit print_r ausgeben lasse, sind meine Daten korekt

Code: Alles auswählen

Array
(
    [0] => Array
        (
            [aktion] => edit
            [feld] => name
            [attr] => value
            [value] => Austria
        )
    [1] => Array
        (
            [aktion] => edit
            [feld] => localname
            [attr] => value
            [value] => Österreich
        )
)
die Daten, die json übermittelt werden nicht mehr; es fehlt im Array 'Österreich'

Code: Alles auswählen

[{"aktion":"edit","feld":"name","attr":"value","value":"Austria"},{"aktion":"edit","feld":"localname","attr":"value","value":""}]
Auch wenn ich Tabellendaten auf diese weise übertrage, werden die Daten nur bis zum Umlaut übertragen.

Wenn ich Daten aus einem Formular per Ajax und Post an den Server schicke, wird alles Korrekt übermittelt; auch Umlaute.

Kann mir dabei jemand helfen :?:

Danke

xmurrix
Beiträge: 3154
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Ajax-Request: Daten mit Umlaute veschwinden

Beitrag von xmurrix » So 23. Nov 2008, 13:35

Hallo,

die Funktion json_encode erwartet Strings, die mit UTF-8 kodiert sind, im Backend hast du aber bei 'de' ISO-8859-1 oder je nach Einstellungen ein anderes Encoding.

Zuerst müsstest du die Strings in UTF-8 umwandeln, falls sie nicht in UTF-8 vorliegen.

Code: Alles auswählen

if (strtoupper($encoding[$lang]) !== 'UTF-8') {
    // aktuelles encoding ist nicht utf-8, also string in utf-8 umwandeln
    $string = iconv(strtoupper($encoding[$lang]), 'UTF-8', $string);
}
Die iconv Extension ist seit PHP 5.0 in PHP integriert, also sollte es per default vorhanden und einsetzbar sein.
Zur Not würde es auch mit utf8_encode(), die kann aber nur ISO-8859-1 Strings in UTF-8 umwandeln, also wird dies bei anderen Sprachen im Backend zu Problemen führen.

Ich glaube, das Beste wäre, wenn man die Contenido-Installation komplett auf UTF-8 umstellt, dann erübrigen sich die Konvertierungen zwischen verschiedenen Encodings.

Gruß
xmurrix

NobodyBody
Beiträge: 80
Registriert: Di 14. Sep 2004, 08:14
Kontaktdaten:

Beitrag von NobodyBody » So 23. Nov 2008, 13:41

Hallo xmurrix,

danke für deine Antwort.
Ich glaube, das Beste wäre, wenn man die Contenido-Installation komplett auf UTF-8 umstellt, dann erübrigen sich die Konvertierungen zwischen verschiedenen Encodings.
Wie stelle ich das an ?

Gruß

xmurrix
Beiträge: 3154
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Beitrag von xmurrix » So 23. Nov 2008, 14:04

Hallo,
NobodyBody hat geschrieben:...
Ich glaube, das Beste wäre, wenn man die Contenido-Installation komplett auf UTF-8 umstellt, dann erübrigen sich die Konvertierungen zwischen verschiedenen Encodings.
Wie stelle ich das an ?...
schau dir mal folgenden Post an:
http://forum.contenido.org/viewtopic.php?t=22838

Ich würde das aber vorher auf einem Testsystem machen, sicher ist sicher.

Soll eine schon vorhandene DB komplett auf UTF-8 umgestellt werden, kannst du das mit dem Script convert-encoding.php machen. Das Script wurde zwar für WordPress erstellt, lässt sich aber auch für andere Projekte einsetzen, man muss nur die Zeile "require_once '../wp-config.php';" entfernen und die DB-Connectionparameter setzen.
http://versions.tacker.org/svn/wp-conve ... coding.php
(Vorherige Sicherung der DB wäre nicht schlecht.)

Gruß
xmurrix

Gesperrt