echo $begrüßung;
nicht gleich meckern, ich weiß, es gibt schon etliche Threads zur Datencodierung etc.
Das Thema ist ein recht komplexes, weil du mehrere Komponenten hast, die alle zusammenspielen müssen, damit es keinen Datensalat gibt. Da gibt es den Browser, Javascript, AJAX, PHP und noch die Datenbank, und alle müssen genau instruiert werden, welche Kodierung sie zu erwarten haben, und dann auch noch in der Lage sein, damit umgehen zu können.
Aber keines davon bringt mich weiter und irgendwie weiß ich derzeit nicht, was ich wirklcih falsch mache oder was ich wie codieren und decodieren soll.
Da heißt es zuerst einmal zu ermitteln, welche Kodierungen vorliegen und welche erwartet werden. Außerdem wird sicher noch das Wissen benötigt, wie man von der einen Kodierung zur anderen kommt, wenn zwei Komponenten unterschiedlich arbeiten oder eingestellt sind.
Standardproblem: AJAX-Routine übergibt Datenstring an den Server zu einer PHP Datei und irgendwie passt es mit den deutschen Umlauten nicht, was sich jedoch komischerweise wie folgt äußert:
Du hast also ein Problem mit der Zeichenkodierung.
http_request.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
Diese Angabe hat nichts mit der Zeichenkodierung zu tun sondern mit der Art, wie die Formulardaten im Allgemeinen zusammengestellt werden.
Alles klappt prima, bis man auf die Idee mit Umlauten kommt. Aber was jetzt wie umcodieren?
Im Prinzip gar nichts. Und schon gar nicht, ohne zu analysieren, was genau schief läuft.
Denn das Problem ist, das ich nicht weiß, was die PHP Datei auf dem Server nicht versteht?
Doch zuvor solltest du dir die Grundlagen der Kodierung von Zeichen im Allgemeinen anschauen und insbesondere dich über die Zeichensätze/Kodierungen ISO 8859-1/Windows1252 (hierzulande recht gebräuchlich) und Unicode/UTF-8 informieren.
Denn es ist so, gebe ich einfach mal den String aus den $_POST Variablen aus bzw. sende diesen zurück, dann steht nach Eingabe von "Bäume" im Textfeld auch hinterher "Bäume" in $_POST['textfeld'], also wäre doch eigentlich alles ok, oder wie?
Wenn alles ordentlich aussieht, dann machen alle beteiligten Komponenten alles richtg, beziehungsweise reichen alles einfach nur durch, ohne sich um die Daten zu kümmern.
Die PHP Datei bringt mir den Inhalt immer richtig zurück, damit arbeiten kann sie aber wohl nicht, denn SQL-Aufrufe enden Erfolglos.
Wie ermittelst du, dass die SQL-Aufrufe erfolglos enden? Fragst du Fehlermeldungen ab oder ignorierst du sie und merkst nur am Ergebnis, dass das was nicht hinhaut?
Ich kann ja zum Test die PHP Datei direkt im Browser aufrufen, dann liefert sie korrekte Ergebnisse, auch wenn ich Umlaute im Browser eingebe, werden die "gleichen" (denn so gleich können sie ja nicht sein) Daten mittels der AJAX Routine gesendet, dann gibts wieder nur Murks.
In welcher Kodierung erhält der Browser die Daten? Welche Kodierung verwendet die AJAX-Routine standardmäßig? Lässt sich das umschalten? Oder lassen sich alle anderen Beteiligten zur Verwendung der gleichen Kodierung wie die AJAX-Routine überreden?
Vermutlich wird AJAX UTF-8 verwenden. Wie du aus dem oben empfohlenen Grundlagenstudium hoffentlich erkannt hast, ist UTF-8 eine gute Wahl, da sich damit so gut wie alle möglichen und unmöglichen Schriftzeichen dieses Planeten kodieren lassen. Dumm nur ist, dass meist noch von ISO 8859-1 ausgegangen wird, und dass einige Beteiligten (PHP vor Version 6, MySQL vor Version 4.1) ganz oder teilweise nicht mit UTF-8 umgehen können.
NUR, was hat der Server für Daten bekommen?
Er hat vermutlich Kodierung A erhalten und versucht sie mit Kodierung B zu entschlüsseln, was nicht bei allen Zeichen funktioniert.
Ich bin ein wenig ratlos und hoffe ihr könnt mir helfen, sofern ihr mich jetzt überhaupt verstanden habt...?!?! ich hoffe doch... ;-)
Ja, aber ich befürchte, dass nun nur noch mehr Sorgenfalten auf deiner Stirn aufgetaucht sind. Außerdem habe ich auch nicht alle Punkte angesprochen, auf die es zu achten gilt. Doch als Grundlage zur weiteren Forschung deinerseits sollte es erstmal reichen. Den Rest sehen wir später ...
echo "$verabschiedung $name";