MySQL Umlaute
MH
- datenbank
- mysql
Moin,
ich weiß es gibt schon ganz viele Einträge über diese Thema hier und auch in anderen Foren/auf anderen Seiten. Dennoch stelle ich die Frage, weil ich nicht weiter komme und hoffe das ihr mir helfen könnt :)
Ich hab in einem Projekt Namen in einer Datenbank stehen, die Umlaute enthalten. Soweit alles gut, ich bekomme die Namen richtig ausgegeben und auch wieder eingetragen.
Jetzt ist mir letztens aufgefallen, dass es an einer einzigen Stelle anscheinend Probleme mit den Umlauten gibt. Dadurch bekommt der Nutzer eine Fehler ausgeworfen und kann nicht weiter machen. Ich bin mir sehr sicher, dass das an den Umlauten liegt, da der Fehler nur bei Namen mit den Umlauten auftritt.
Zu meinem generellen Vorgehen mit Umlauten:
Hat jmd. eine Idee woran das liegen kann, dass es trotzdem das Problem mit den Umlauten gibt?
Gruß
MH
Nachdem eine Verbindung aufgebaut wird
Tja. Es wird wohl von erheblichen Interesse sein wie dieses GENAU geschieht. Du darfst Benutzername und Passwort durch Asterixe ersetzen. Sollte dieses in irgendeiner Art von Terminal- oder Kommandofenster geschehen werde auch darüber Informationen sowie ggf. über die "Umgebung" des Kommandointerpreters, der den MySQL-Client startet, benötigt.
Hi,
das aufbauen der Verbindung läuft über php:
$mysqli = mysqli_connect('Host', 'Benutzername', 'Passwort', 'Datenbankname');
$mysqli->query("SET NAMES 'utf8'");
Eine Query wenn die Fehlschlägt sieht dann so aus:
SELECT `Tag1`, `Tag2`
FROM `Bearbeiter`
WHERE `Name` = 'R¸ppert'
Das , soll in dem Fall ein ü sein. Da der den Namen so aber nicht findet bekomme ich eine leere "Abfrage"
Gruß
MH
$mysqli
Aha. PHP ist der Client.
Ist denn der abgefragte Name in UTF-8 notiert?
Dann wäre noch das hier: mysqli_set_charset($mysqli, "utf8") oder $mysqli->set_charset("utf8")
Eine Query wenn die Fehlschlägt sieht dann so aus:
SELECT `Tag1`, `Tag2` FROM `Bearbeiter` WHERE `Name` = 'R¸ppert'
Das , soll in dem Fall ein ü sein.
Zeig doch mal den Code der diese Query zusammenbaut und woher name
kommt. Wenn der Fehler schon in der Query steckt, kann das Problem ja wohl nicht an MySQL liegen. MfG
Moin,
natürlich! Daran hab ich gar nicht gedacht, dass das dann ja schon vorher falsch übergeben wird.
Der Name wird mit einem Ajax-Request übergeben, ich hole mir den also mit $_GET['name']
.
Gibt es da irgend ne Möglichkeit das Umlaute richtig übergeben werden? Ansonsten baue ich mir eine "Umlaut-Funktion" die das jeweils umwandelt für die Requests.
Gruß und danke
MH
Hallo MH,
Der Name wird mit einem Ajax-Request übergeben, ich hole mir den also mit
$_GET['name']
.
Gibt es da irgend ne Möglichkeit das Umlaute richtig übergeben werden?
Das HTML-Dokument in UTF-8 abspeichern und allen, die es wissen müssen, mitteilen, dass die Zeichenkodierung UTF-8 ist?
Matthias
Hi,
ich meinte eigentlich abgesehen davon ;)
Die Dateien sind alle utf-8 und im HTML-header hab ich mit meta die collation gesetzt:
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
Oder ist das falsch?
Gruß und trotzdem Danke
MH
Hallo MH,
Oder ist das falsch?
https://www.w3.org/International/questions/qa-html-encoding-declarations
Mithilfe von http://validator.w3.org/i18n-checker/ kannst du dir anzeigen lassen, welche Zeichenkodierung im HTTp-Header gesendet wird.
Bis demnächst
Matthias
Moin,
Laut dem Validator ist die Zeichenkodierung UTF-8, ist also richtig und sollte somit auch richtig übergeben werden.
Kann das sonst auch am JavaScript liegen? Oder hat noch jmd. eine andere Idee woran das liegen kann? Ansonsten forme ich die Namen für die Übergabe immer um.
Gruß
MH
Moin,
natürlich! Daran hab ich gar nicht gedacht, dass das dann ja schon vorher falsch übergeben wird.
Der Name wird mit einem Ajax-Request übergeben, ich hole mir den also mit$_GET['name']
.
Zeig mal bitte den JS Code der den ajax Request zusammenbaut. Und guck mal wie ein ü da rausgeht, normalerweise als %C3%BC kodiert. MfG
Hi,
Der JS-Code:
function zeigFach(name){
if(name == ""){
document.getElementById("fachWahl").innerHTML = "";
} else{
if (window.XMLHttpRequest) {
// Code für IE7+, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {
// Code für IE6 und IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("fachWahl").innerHTML = this.responseText;
}
};
xmlhttp.open("GET","php/getinfo.php?name="+name,true);
xmlhttp.send();
}
}
Die URL die da rauskaumt sieht so aus: php/getinfo.php?name=Fl%C3%BCgel
Das ü wird in diesem fall also richtig codiert...
Gruß
MH
hi,
Die URL die da rauskaumt sieht so aus:
php/getinfo.php?name=Fl%C3%BCgel
Das ü wird in diesem fall also richtig codiert...
So sollte es sein, ja. Aber: Du müsstest das auch sicherstellen, indem Du name=encodeURIComponent(name);
aufrufst. Hast Du das noch vor dem Aufruf Deiner Funktion, ich sehe es nämlich nicht.
Ansonsten sollte das aus $_GET['name']
unzerknittert wieder rauskommen dann wäre die nächste Frage wie es in die Query reinkommt und dabei kaputtgehen kann 😉
MfG