Ergebnis 1 bis 3 von 3
Thema: MySQL und UTF8-Abfragen
-
17-07-2015, 03:58 #1
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
Meine db_conig.php
PHP-Code:
$mysqli = new mysqli(host, benutzer, passwort, datenbank);
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!");
}
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($reback, JSON_HEX_TAG);
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($reback, JSON_HEX_TAG);
Geändert von dertypdernixkan (17-07-2015 um 04:03 Uhr) Grund: scheiße formatierung!
-
17-07-2015, 07:22 #2
Foren-Gott
- registriert
- 19-05-2008
- Beiträge
- 5.667
AW: MySQL und UTF8-Abfragen
wenn alles mit utf8 arbeitet und bei jedem contextwechsel vernünftig escapest, hast du keine probleme
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
dann solltest du mal nachsehen, ob dein default character set in mysql tatsächlich auf utf8 gesetzt ist
??? nee, kenne ich nicht
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
-
17-07-2015, 09:02 #3
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
Ähnliche Themen
-
UTF8 Daten in MySQL
Von daWonderer im Forum Serverseitige ProgrammierungAntworten: 15Letzter Beitrag: 14-08-2007, 11:12 -
[MySQL] 2 Tabellen abfragen
Von planet4 im Forum Serverseitige ProgrammierungAntworten: 19Letzter Beitrag: 11-03-2007, 01:06 -
[MySql]Abfragen verkürzen ?
Von ancient.shadow im Forum Serverseitige ProgrammierungAntworten: 3Letzter Beitrag: 27-02-2006, 07:12 -
Mysql-2 Abfragen
Von Trojax im Forum Serverseitige ProgrammierungAntworten: 3Letzter Beitrag: 27-10-2005, 14:53 -
mysql 2 Tabellen abfragen
Von planet4 im Forum Serverseitige ProgrammierungAntworten: 6Letzter Beitrag: 31-10-2004, 16:27
Lesezeichen