Ergebnis 1 bis 3 von 3
  1. #1
    dertypdernixkan ist offline Tripel-As
    registriert
    31-05-2013
    Beiträge
    194

    MySQL und UTF8-Abfragen

    Moinsen

    ich bin eben über ein seltsames Verhalten von MySQL in Verbindung mit Ajax und UTF8 gestoßen, was ich mir gleich mal zum Anlass nehmen möchte euch darüber zu berichten. Auch für diejenigen, die mal auf diese Problem stoßen werden.

    Folgendes Szenario:

    Ich habt eine Seite bei der Content über die URI abgerufen wird, normal machen es die meisten über IDs, in meinem Fall wird der Username ausgelesen. Solange der Username keine Umlaute enthält ist alles prima, aber wehe wenn doch!

    Die Seite ist via Meta-Tag und Header-Befehl auf UTF8 gestellt, die Datenbank ebenfalls, leider kam bei der Überprüfung des Usernamen "Arschmän" folgendes raus:

    arschm%c3%a4n

    Via

    PHP-Code:
    urldecode 
    wurde daraus ganz schnell wieder "arschmän". Schön und gut, gefunden wurde er in der Datenbank trotzdem nicht. Also habe ich den Fehler gesucht und auch recht flott gefunden, ich musste den Default Client Character Set mitteilen, und das geht so:

    Meine db_conig.php

    PHP-Code:

    $mysqli 
    = new mysqli(hostbenutzerpasswortdatenbank);

    if (
    $mysqli->connect_error) {
        include 
    $_SERVER["DOCUMENT_ROOT"]."/fvs/mistake.html";    exit();
    }

    # das ist der entsprechende Zusatz
    if (!$mysqli->set_charset("utf8")) {
        
    printf("Das Charset \"UTF8\" konnte nicht gesetzt werden. Es können Fehler bei der Datenbankabfrage auftreten!");

    Super! Jetzt wird auch der User "Arschmän" aus der Datenbank geholt!

    Wenn da nicht noch der Ajax-Request wäre. Der hat mich fast zur Verzweiflung getrieben! Der sah folgendermaßen aus (den JS-Teil lasse ich einfach weg, der ist dabei unwichtig!)

    PHP-Code:
    $stmt $mysqli->prepare("SELECT `mgb` FROM `xxx` WHERE `id` = ? LIMIT 1");
    $stmt->bind_param("i"$dbi);
    $stmt->execute();
    $stmt->store_result();
    $stmt->bind_result($b_mgb);
    $stmt->fetch();
    $stmt->close();

    $b_mgb make_clean($b_mgb$mysqli);
    $b_mgb change($b_mgb$mysqli);
    $b_mgb bb_code($b_mgb""$mysqli);
    $b_mgb utf8_encode($b_mgb);

    $reback = array("r" => $b_mgb"n" => $topline"s" => $scroll);
    echo 
    json_encode($rebackJSON_HEX_TAG); 
    Der hat nämlich aus den Umlauten wieder sinnlose Zeichen gemacht die kein Alphabet der Welt kennt. Ich habe überlegt und überlegt und ... dabei war die Lösung doch relativ simpel.

    Am Ende des Umwandlungsblocks arbeite ich mit utf8-encode, ohne diesen kam die Fehlermeldung "Uncaught SyntaxError: Unexpected end of input". Kennen wir alle, wollen wir aber nicht lesen!

    Des Rätsels Lösung: vorher erstmal decodieren bevor man codiert!

    PHP-Code:
    $stmt $mysqli->prepare("SELECT `mgb` FROM `xxx` WHERE `id` = ? LIMIT 1");
    $stmt->bind_param("i"$dbi);
    $stmt->execute();
    $stmt->store_result();
    $stmt->bind_result($b_mgb);
    $stmt->fetch();
    $stmt->close();

    $b_mgb utf8_decode($b_mgb); // diese Zeile hinzugefügt
    $b_mgb make_clean($b_mgb$mysqli);
    $b_mgb change($b_mgb$mysqli);
    $b_mgb bb_code($b_mgb""$mysqli);
    $b_mgb utf8_encode($b_mgb);

    $reback = array("r" => $b_mgb"n" => $topline"s" => $scroll);
    echo 
    json_encode($rebackJSON_HEX_TAG); 
    Und nun werden auch die Umlaute wieder korrekt angeziegt!
    Geändert von dertypdernixkan (17-07-2015 um 04:03 Uhr) Grund: scheiße formatierung!

  2. #2
    tsseh ist offline Foren-Gott
    registriert
    19-05-2008
    Beiträge
    5.635

    AW: MySQL und UTF8-Abfragen

    Zitat Zitat von dertypdernixkan Beitrag anzeigen
    ich bin eben über ein seltsames Verhalten von MySQL in Verbindung mit Ajax und UTF8 gestoßen
    wenn alles mit utf8 arbeitet und bei jedem contextwechsel vernünftig escapest, hast du keine probleme

    Zitat Zitat von dertypdernixkan Beitrag anzeigen
    Die Seite ist via Meta-Tag und Header-Befehl auf UTF8 gestellt, die Datenbank ebenfalls, leider kam bei der Überprüfung des Usernamen "Arschmän" folgendes raus:

    arschm%c3%a4n
    klar, auf clientseite richtig escaped für den contextwechsel und auf php-seite musst du en dann decodieren. um es in die datenbank einzutragen nutzt du dann sicher real_escape_string

    Zitat Zitat von dertypdernixkan Beitrag anzeigen
    Schön und gut, gefunden wurde er in der Datenbank trotzdem nicht. Also habe ich den Fehler gesucht und auch recht flott gefunden, ich musste den Default Client Character Set mitteilen, und das geht so:
    dann solltest du mal nachsehen, ob dein default character set in mysql tatsächlich auf utf8 gesetzt ist

    Zitat Zitat von dertypdernixkan Beitrag anzeigen
    Am Ende des Umwandlungsblocks arbeite ich mit utf8-encode, ohne diesen kam die Fehlermeldung "Uncaught SyntaxError: Unexpected end of input". Kennen wir alle, wollen wir aber nicht lesen!
    ??? nee, kenne ich nicht

    Zitat Zitat von dertypdernixkan Beitrag anzeigen
    Des Rätsels Lösung: vorher erstmal decodieren bevor man codiert!
    die lösung ist einen utf8 codierten string nach iso8859 zu wandeln um diesen dann wieder in einen utf8 codierten string zu konvertieren?
    das klingt komisch und nicht nach einer lösung

  3. #3
    Avatar von mikdoe
    mikdoe ist offline Administrator
    registriert
    01-05-2010
    Beiträge
    7.596

    AW: MySQL und UTF8-Abfragen

    @dertypdernixkan: zeig mal den JS Code, mit dem du den Ajax Request machst
    Das deutsche Javascript Forum http://forum.jswelt.de http://forum.jswelt.de/images/logoJsWeltForumV4_32x22.png
    Sorry wenn ich manchmal ohne Hallo und nur klein schreibe! Dann bin ich nicht unfreundlich sondern mit nervigem kleinem Touch Tablet zugange

Ähnliche Themen

  1. UTF8 Daten in MySQL
    Von daWonderer im Forum Serverseitige Programmierung
    Antworten: 15
    Letzter Beitrag: 14-08-2007, 11:12
  2. [MySQL] 2 Tabellen abfragen
    Von planet4 im Forum Serverseitige Programmierung
    Antworten: 19
    Letzter Beitrag: 11-03-2007, 01:06
  3. [MySql]Abfragen verkürzen ?
    Von ancient.shadow im Forum Serverseitige Programmierung
    Antworten: 3
    Letzter Beitrag: 27-02-2006, 07:12
  4. Mysql-2 Abfragen
    Von Trojax im Forum Serverseitige Programmierung
    Antworten: 3
    Letzter Beitrag: 27-10-2005, 14:53
  5. mysql 2 Tabellen abfragen
    Von planet4 im Forum Serverseitige Programmierung
    Antworten: 6
    Letzter Beitrag: 31-10-2004, 16:27

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •