Umlaute in MySql Problem
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
absatz
absurde idee
ausgabe
browser
code
datei
datenbank
editor
ergebnis
format
gleichen zeichensatz
header
kodierung
problem
speichern
transport
tschechischen sonderzeichen
type
umlaut
verwenden
-
Hallo,
ich möchte Umlaute in eine Mysql DB speichern. Der Umlaut kommt aus einem form. wenn ich ihn dann speichere wird z.B. ein Ö als Ö gespeichert. Ich mahce auch mysql_real_escape_string() vor dem speichern.
Das interessante ist, wenn ich htmlentities() benutze, zusaätulich zu mysql_real_escape_string() benutze dann wandelt er nicht Ö sondern Ö in html Zeichen um, was ebenfalls sinnlos ist.
ich habe des script in anso kodiert, und habe es dann auch als utf-8 probiert. hier gibt es den selben Fehler, und zusätzlich zeigt der Browser ganz oben einen "absatz" an, obwohl nichts der gleichen im code steht. das ganze design wird dadurch verschoben. offenbar bringt diese kodierung den Browser durcheinander.
Ich habe schon die Kollation der Mysql db in verschiednestes geändert, aber das bringt gar nichts....
Also kurz: wie kann ich den Umlaut richtig speichern und warum zeigt der browser mit anderer Kodierung einen Absatz wo nichts dergleichen steht?
ich sitze daran jetzt schon 3 Stunden, und ihr seid meine letzte hoffnung. Jede auch noch so absurde Idee wird von mir ausprobiert um das zu lösen... -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
@aklasseyo mey
hast du schon geprüft, ob deine scripte den gleichen zeichensatz verwenden als dein mysql server? sollte dein mysql utf8 codieren und deine scripte werden von einem 'stinknormalen' editor erstellt, der wahrscheinlich iso--8859-1 o.ä. von sich gibt, dann musst du deine scripte mit iconv o. recode o. dos2unix ... umwandeln (das sind linux utils, unter windows kanst sie mit cygwin verwenden) und anschließend einen guten editor besorgen. natürlich auch dein html sollte utf8 anwenden (<head>...) -
Das mit dem Absatz im Browser liegt an der Kodierung der php/html Seite selbst. Z.B. wenn du mit Notepad eine Datei nicht im ANSI Format speicherst.
Tabellen sollten nach heutigem Standard latin1 kodiert sein. Bei der Ausgabe solltest du ganz oben in der Datei den Header angeben:
header("Content-Type: text/html; charset=utf-8");
Sollte es dann immernoch Probleme geben, kannst du utf8_decode($str) bzw. utf8_encode($str) benutzen.
Ich persönlich speichere mittlerweile fast alles urlencoded, da ich es einfacher finde, die Ausgabe zu optimieren, als am Ende irgendwelche Zeichenfehler in der Datenbank zu beheben (z.B. bei Tschechischen Sonderzeichen oder Chinesisch).
Möglichkeiten, einen String korrekt in die Datenbank zu schreiben und/oder auszulesen gibt es jedoch viele. Und meistens führen alle über kurz oder lang zum selben Ergebnis. -
Das Problem war, das der Browser das Formular in UTF 8 abgesendet hat, mein script aber ansi war. Jetzt habe ich auf die Seite
geschreiben die MySql Db in latin1 Swedish umgeändert und eben auch das php Script in ISO-8859-1 konvertiert, was eigentlich so wie so ansi enspricht... jetzt funktioniert es!!<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1" />
Vielen Dank für die Info!
To be closed... -
Kleine Anmerkung: Meta wird durch die Servereinstellung überschrieben :)
-
Vorher hats aber nicht funktioniert... D.h. wundert es mich...
-
Closed, da Problem gelöst.
@fabo: Ja, wenn der transport layer ein Encoding angibt, dass unterstützt wird, wird der encoding sniffing algorithm mit confidence certain abgebrochen. Das es nicht geklappt hat, liegt warsch. daran, dass beim Content-Type das falsche Encoding gesetzt wurde. Aber egal, das Problem ist ja gelöst :) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage