json_encode(array()) - Verhalten bei Sonderzeichen

Hallo Leute,

ich habe hier eine Datenbankabfrage, die manchmal klappt und manchmal nicht.
Das Problem liegt dabei aber sicherlich am Schnipsel „json_encode(array())“.

Leider kann ich gerade keine Beispieldaten posten.

Aber jetzt erstmal ausführlich.
Via Ajax poste ich einen Wert (eine Zahl) an die „load_something.php“.
Die PHP-Datei nimmt die Zahl und fragt alle Einträge, die dieser Zahl zugeordnet worden, ab.
Bei einigen Zahlen klappt das tadellos, bei anderen Zahlen bekomm ich einen Ajax error - also nicht direkt einen Fehler, sondern Ajax hat als Ergebnis error.
Jetzt habe ich mal die „load_something2.php“ erstellt, in der die Daten statt „echo json_encode(array())“ einfach via „var_dump“ ausgeben werden. Siehe da, es klappt und zwar für jede Zahl, also für jede Abfrage.
Ergo muss das Problem irgendwo beim json_encode liegen.

Nun zu den Daten, was ist enthalten:
URLs, Datwerte, Strings, Integer, leere Zeilen.
Ich könnte mir vorstellen, dass die URLs und Strings Probleme machen, durch Zeichen wie /, Ä, Ö oder €.
Kann das sein?

Du kannst dir in der Konsole deines Browsers die genauen Responses der Ajax-Calls ansehen (XHR). Da müsstest du dann auch den Fehler finden. Umlaute, Slashes etc. dürften kein Problem sein.

Also die Funktion sieht so aus:

    var group_ID = get_url_param( 'group_ID' );
    console.log(group_ID);
    $.ajax({
        type: 'POST',
        url: 'load_something.php',
        dataType: "json",
        async:true,
        data: { group_ID },
    success: function(data) {
      console.log(data);
    },
    error: function() {
      console.log("AJAX failure");
    }
    });

Manchmal erhalte ich mein Array, manchmal erhalte ich „AJAX failure“.

„load_something.php“ - Network - Response -
„This request has no response data available“.

//EDIT
ERLEDIGT:
Lösung gefunden - es war ein Fehler in der Datenbank. Ich hatte den Eintrag irgendwann mal per Hand korrigiert und da stand in einem Feld ein „ü“. Habe es jetzt in „ue“ umgeändert und dann ging es.

dann hast du aber nicht die Ursache gelöst. Bei korrekter Codierung (UTF-8) sollte ein ü ohne Probleme verarbeitet werden können.

Ja da liegt sicherlich noch irgendwo anders das Problem.
In der Datenbank liegt das Ä bspw so vor: ä
Sicherlich gibt es hier gerade ein Problem, das ich noch nicht verstehe.
Das Ü stand aber nicht irgendwie codiert in der Datenbank, sondern einfach als ü.

Klick mich

Wenn, dann schon richtig:
http://lmgtfy.com/?q=json_encode+umlaute
Sicherlich werden sie lmgtfy absofort öfters verwenden, habe ich Recht? :slight_smile:

Das Problem hat sich ja schon geklärt. Ich muss mich jetzt aber erstmal weiter belesen, ob man ohne weiteres in PHPmyAdmin in der DB einfach ein ü antragen könnte, ohne das es Fehler gibt.

Wenn Datenbank/Tabelle/Spalte, Datenbankverbindung, Dokumentenkodierung und HTML-Charset überall auf UTF-8 eingestellt sind (wie es sich gehört), dürfte es eigentlich keine Probleme bezüglich Sonderzeichen geben.

Also wenn ich bspw. mit PhpMyAdmin einen neuen Eintrag erstelle und bei einem String einfach ein „Üü“ schreibe, müsste das auch so funktionieren?
Dann war sicherlich was bei der Kodierung der Datei, die es abruft, falsch.

Ich denke wenn es in phpMyAdmin falsch angezeigt wird, ist davon auszugehen dass die Daten bereits falsch in der Datenbank gespeichert sind.

Also ich hatte über eine PHP-Seite ein Eintrag vorgenommen, also ein insert mit einem ä und in der DB kam dann halt das hier an: ä.

Dann hast du irgendwo nicht auf UTF-8 eingestellt. Beachte:

Ja, das Problem hatte ich schon einmal.
Da musste ich damals die Datei erneut mit Encoding UTF-8 in Sublime Text öffnen.
Wahrscheinlich werde ich das einfach mal für alle nochmal machen müssen.

Also prinzipiell:
Wenn direkt ein Ü in der DB über PHPMyAdmin in einem Feld eintrage, müsste das ohne Fehler oder ähnliches so wieder abgerufen werden.