[PHP] Ä,Ö,Ü und ß werden falsch eingetragen

glowhand

Programmierer
21 April 2006
273
16
Hi!
habe soeben ein Gästebuch programmiert... nur werden die ganzen Buchstaben jenseits der 26 falsch in der MYSQL-Datenbank eingetragen... das sieht dann zB so aus:

so kilb ...mensch mein eintrag hört sich ja nicht so lobend ,eetwas oberflächlich an finds aber schon mal cool das du mich zu deinen freunden zählst...haben ja auch schon öfters frühs vor der schule eine zusammen geraucht also bis bald ...die malu


der text wird natürlich vorher mit htmlentities bearbeitet...

danke für eure hilfe.
 
Das Problem habe ich auch gerade und ich weis nicht was besser ist:
1. die spalte und Tabelle als utf8_unicode_ci sämmtliche eintragungen in unicode mit CONVERT
oder
2. latin charset und beim auslesen mit CONVERT arbeiten

Wie sendest du denn Deine Dokumente zur DB und welchen charset hast du eingetragen?
 
Schau in phpmyadmin in die Tabelle und dort bei der Strucktur Übersicht steht das charset der spalte. Das charset der Tabelle siehst du unter Operationen, der Tabelle.

Ich hab mich nun so entschlossen die Spalten utf-8 zu lassen als unicode weil die angeblich auch kleiner sind also latin, und ich sende immer einen Query mit SET names 'UTF_8' bevor ich eintragungen in die DB mache. Wenn man auf die Texte noch htmlentities benutzt dann funzt das wunderbar.

hast du ein Glück das ich´s noch offen hatte :biggrin:
https://dev.mysql.com/doc/refman/5.1/de/charset-connection.html
nochmal gesucht hätte ich net;)
 
uft8_unicode_ci ist zu lesen 8)
lasse jetzt als workaround vor der ausgabe die merkwürdigen zeichen, die für ä, ö, ü und ß stehen sollen mit ä usw ersetzen... das funktioniert erstmal, aber so richtig begeistert bin ich von dieser lösung nicht...
 
Ich benutze latin1_swedish_ci - könntest du vielleicht auch mal probieren ;)
Bei mir gehts einwandfrei :)
 
Hi Raven das swedisch ist eigentlich vollkommen wurscht, jeder latin1 charset wird einwandfrei Funktioniere, weil die Verbindung zur DB standartmässig in latin1 erfolgt deswegen muss man wenn man was anderes nutzt das in der config angeben oder ein SET NAMES 'CHARSET' senden.

@glowhand
Wieso workarround wozu gibt es htmlentities()?

Ich lasse es wie folgt in die DB schreiben
PHP:
htmlentities($_POST['name'], ENT_QUOTES, 'UTF-8')
fals du deine charset der spalten auf latin1 wechselst, kannst du das ,'UTF-8' in den Klammern weglassen.
 
Ich benutze latin1_swedish_ci - könntest du vielleicht auch mal probieren ;)
Bei mir gehts einwandfrei :)

bei mir ist das auch voreingestellt. aber beim importieren von sql-dumps mit deutschen texten wandelt er die zeichen nicht richtig um. daher hab ich bei mir alle datenbanken auf latin_german1_ci umgestellt und muss weder beim schreiben noch beim lesen irgendwas umwandeln...
 
@ ActionScripter

Dann bekommst du aber höchstwarscheinlich Probleme wenn du irgendwann mal deine Seiten per XML Parser ausliefern willst. Also richtig XHTML Valid. Dann jagt der Parser deinen ganzen äs,üs und ös uws. durch den XML Parser und du bekommst einen Error nach dem anderen. Aber solang du das nicht willst funzt des auch wunderbar. :mrgreen:
 
@ ActionScripter

Dann bekommst du aber höchstwarscheinlich Probleme wenn du irgendwann mal deine Seiten per XML Parser ausliefern willst. Also richtig XHTML Valid. Dann jagt der Parser deinen ganzen äs,üs und ös uws. durch den XML Parser und du bekommst einen Error nach dem anderen. Aber solang du das nicht willst funzt des auch wunderbar. :mrgreen:

aha gut zu wissen. aber in dem fall kann man ja dann ja sicherlich noch ein html_entities nach der db-abfrage hinterher schieben :)
 
Eijo sowas geht, ich machs immer andersrum ich speichere meine Texte beim eintragen im richtigen Format so spare ich beim Anzeigen der Seite und auslesen aus der DB immer ein paar 1kstel Sekunden, aber das ist denke ich geschmackssache.
 
Ich benutze latin1_swedish_ci - könntest du vielleicht auch mal probieren ;)
waaaah

bei mir ist das auch voreingestellt. aber beim importieren von sql-dumps mit deutschen texten wandelt er die zeichen nicht richtig um. daher hab ich bei mir alle datenbanken auf latin_german1_ci umgestellt und muss weder beim schreiben noch beim lesen irgendwas umwandeln...
supi *Thumbs up*
Allerdings besagt ja latin_grman1_ci bzw. lating_german2_ci nur die Sortierreihenfolge und nicht welche Sonderzeichen genutzt werden können.
 
Weil ice mir gerade in ICQ auf den Füßen steht :)mrgreen:): Ja, man benutzt latin1_german_ci, und ja, der Onkel raven hat sich darüber noch nie wirkliche Gedanken gemacht, weils immer ohne Probleme ging und er eh nie einen wirklichen Sinn in den ganzen Charsets gesehen hat :oops:

Edit: Aber Umlaute kann ich bei mir auch mit swedish ohne Probleme speichern ... ganz ohne CONVERT()
 
Zuletzt bearbeitet: