# Umlaute und nochmal Umlaute



## dennis-sauer (12. Oktober 2008)

Hallo zusammen,

folgende kleine Geschichte habe ich. Ich arbeite zur Zeit an einer kleinen "Seite" mit u.a. Datenbank aber das soll eigentlich nicht das Thema sein 

Wenn ich einen Suchbegriff im Formular eingebe, auf Absenden klicke kommt die Eregebnisseite auf welcher steht "Kein Eintrag zu deiner Suche nach sÃ¼d gefunden"

Kennt jemand Abhilfe? Der Charset steht schon mit voller Absicht auf "iso-8859-15, utf-8"

Gruß

Dennis


----------



## kuddeldaddeldu (12. Oktober 2008)

Hi,



dennis-sauer hat gesagt.:


> Kennt jemand Abhilfe? Der Charset steht schon mit voller Absicht auf "iso-8859-15, utf-8"



Wie soll das funktionieren? Du musst Dich für ein Charset entscheiden.

LG


----------



## Maik (12. Oktober 2008)

Hi,

bei zwei unterschiedlichen Charsets stimmt wohl die Zeichenkodierung in der DB und der Ausgabe des Webservers an die Dokumente  nicht überein, mit einer einheitlichen UTF-8-Zeichenkodierung sollte es eigentlich keine derartigen Ausgaben geben.

Ansonsten schau dir mal [phpf]htmlspecialchars[/phpf], [phpf]htmlentities[/phpf] oder [phpf]utf8_encode[/phpf], [phpf]utf8_decode[/phpf] an.

mfg Maik


----------



## dennis-sauer (12. Oktober 2008)

Genau das ist das kuriose. 

Ich hab die Datenbank mit diversen Informationen gefüllt. Wenn ich den charset auf den Seiten auch auf den Ergebnisseiten auf utf-8 lasse, werden die Ergebnisse in denen Umlauten vorkommen falsch dargestellt. Mit dem was ich eingegeben habe, werden die Ergebnisse richtig dargestellt. 

Dann muss ich noch zusehen das ich die Umlaute im HTML Code nicht als ä usw schreibe. Das ist ein totales durcheinander.

Wenn ich es als utf-8 lasse werden die Infos aus der DB nicht richtig ausgegeben. In der DB MUSS ich alles als latin1_general_ci machen sonst stehen die Umlaute in der DB falsch...


----------



## kuddeldaddeldu (12. Oktober 2008)

Hi,

ich verstehe nicht ganz. Wenn die DB auf ISO-Latin steht, musst Du auch Latin ausgeben, es sei denn Du kodierst vor der Ausgabe um (aber wozu...). Zeig doch mal ein bischen Code.

LG


----------



## Maik (12. Oktober 2008)

Hi,


kuddeldaddeldu hat gesagt.:


> es sei denn Du kodierst vor der Ausgabe um (aber wozu...)


wäre vor dem Eintragen in die DB nicht geschickter?

mfg Maik


----------



## dennis-sauer (12. Oktober 2008)

Viel Code hab ich diesbezüglich ja nicht...

Hab nochmal alles durchgeschaut. Alle Daten in der DB sind als latin1_general_ci drin. Alles andere funktioniert nicht. 

Alle Seiten, egal ob Sie auf die Datenbank zugreifen oder nicht haben grundsätzlich utf-8

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Mit dieser Variante wird alles ohne Probleme dargestellt, es sei denn ich mach ne DB Abfrage dann werden die Ergebnisse falsch dargestellt, welche in der DB aber richtig sind z.B. Düsseldorf.

Wenn ich nun den charset ändere, werden die Ergebnisse richtig dargestellt aber nicht mehr der reine Text auf der Seite!

Gruß


----------



## Gumbo (12. Oktober 2008)

Was du dir schon mal merken kannst, ist, dass du am besten durchgehend (von der Eingabe über die Verarbeitung bis zur Ausgabe) mit nur einer Kodierung arbeiten solltest. Hier empfehle ich dir UTF-8, da mit dieser sämtliche Unicode-Zeichen kodiert werden können.
Dabei gibt es allerdings ein paar Fallstricke. Etwa dass die Kodierung im HTTP-Header angegeben werden sollte und nicht erst im Dokument selbst.


----------



## dennis-sauer (12. Oktober 2008)

Ok das ist mir eigentlich klar, nur hab ich halt das Problem wenn ich in der DB ut-8 nutzen sollte passiert das was ich beschrieben hatte sprich Entweder stehen die Infos in der DB falsch drin bzw. werden abgeschnitten.


----------



## Maik (12. Oktober 2008)

Aus meinen beiden Beiträgen und Gumbos Tipps hast du eigentlich schon das Handwerkszeug beisammen.

mfg Maik


----------



## Gumbo (12. Oktober 2008)

Bei der Datenbank müssen auch die Daten selbst konvertiert werden.


----------



## dennis-sauer (12. Oktober 2008)

Also irgendwie Blick ich nicht ganz durch... 

Wenn ich die DB auf utf-8 umstelle wie bekomm ich dann die Daten richtig angezeigt in der Ergebnisseite?


----------



## Gumbo (12. Oktober 2008)

dennis-sauer hat gesagt.:


> Wenn ich die DB auf utf-8 umstelle wie bekomm ich dann die Daten richtig angezeigt in der Ergebnisseite?


Das hängt davon ab, mit welcher Kodierung die Daten tatsächlich kodiert sind und mit welcher Kodierung sie ausgeliefert werden. Und ob dann auch noch die richtigen Ergebnisse sind, ist dann auch noch nicht gewährleistet, da diese wiederum von der Kodierung der Suchanfrage abhängt.

Das Ganze ist sicherlich kompliziert, da häufig die grundlegenden Begriffe wie Zeichen, Zeichensatz und Zeichenkodierung nicht klar sind beziehungsweise verwechselt werden. Hier kann dir Michael Jendryschiks Kapitel über Zeichenkodierung hoffentlich weiterhelfen.


----------



## kuddeldaddeldu (12. Oktober 2008)

Hi,



Maik hat gesagt.:


> Hi,
> wäre vor dem Eintragen in die DB nicht geschickter?
> 
> mfg Maik



na ja, das wäre in seinem Fall dann utf8 -> ISO-Latin. Wenn die Eingabe dann Zeichen enthält, die in ISO-Latin gar nicht dargestellt werden können...  
Ich würde gar nicht umkodieren, sondern immer eine durchgängige Kodierung verwenden.

Dennis: Wenn Du überall die gleiche Kodierung verwendest, dürfte es keine Anzeigeprobleme geben. 
- Stell Deine Datenbankverbindung auf UTF-8 (SET NAMES)
- Speichere Deine Scripte und Seiten in UTF-8
- Versehe Deine Formulare mit einem accept-charset-Attribut
- Sende in Deinen Scripten einen Content-Type-Header

LG


----------



## dennis-sauer (12. Oktober 2008)

Ja aber wenn ich meine Daten in der DB als utf-8 einfüge werden die Umlaute gekillt... Ich importiere stinknormale CSV Dateien. Das ist ja das Problem!


----------



## Gumbo (12. Oktober 2008)

Dann sind wohl die Rohdaten ebenfalls nicht UTF-8-kodiert.


----------



## dennis-sauer (12. Oktober 2008)

Ok vielleicht könnte es daran liegen. Ich nehm ne Exceltabelle und speicher die als CSV (Trennzeichen getrennt). Kann ich da sonst irgendwo was einstellen, das wenn ich eine Tabelle in der DB vorbereite, die Daten importiere und die Kollation auf utf8 lasse diese auch richtig in der DB stehen?


----------



## Gumbo (12. Oktober 2008)

Dann müsstest du erst einmal herausfinden, welche Kodierung Excel beim Exportieren verwenden.


----------

