Umlautproblem

September 2009

Nicht selten hat man, betrifft vor allem Anfänger, Probleme mit Umlauten und anderen Sonderzeichen, denn diese werden manchmal fehlerhaft dargestellt.
Schuld ist einerseits die Kodierung der Zeichen und andererseits deren Interpretation.

In folgenden Beispielen werden die verschiedenen Situationen dargestellt.
Dazu werden die Kodierungen UTF-8 und ISO 8859-1 (Latin-1) verwendet. Beide sind im Web häufig vertreten.

Wenn ein Dokument als Unicode (UTF-8) abgespeichert wurde, jedoch als ISO 8859-1 interpretiert wird, geschieht folgendes:
erwartete Ausgabe: ä  ö  ü
wirkliche Ausgabe: Ã¤ Ã¶ Ã¼
Das ä wurde binär gesehen als 11000011 10100100 gespeichert. Die beiden Bytes gehören laut UTF-8 zusammen, werden in ISO 8859-1 allerdings auseinander genommen. Folglich wird aus 11000011 ein à und aus 10100100 ein ¤-Zeichen.

Mit PHP kann man dieses Problem umgehen indem man den entsprechenden Header ändert:
<?php
header
('Content-Type: text/html; charset=UTF-8');
?>
Oder dasselbe mittels .htaccess-Befehl:
AddDefaultCharset UTF-8Damit sollte der Browser den Inhalt korrekt als UTF-8 darstellen.
Andersherum kann man mit Hilfe der PHP-Funktion utf8_decode() die Kodierung der Ausgabe auf ISO 8859-1 ändern. Allerdings ist die Modifikation des Headers meist die praktikablere Lösung.

Wenn die Umlaute als Fragezeichen dargestellt werden, dann wird ein als ISO 8859-1 kodiertes Dokument als UTF-8 interpretiert. Dies stellt das Gegenstück zur oben genannten Situation dar.
erwartete Ausgabe: ä  ö  ü
wirkliche Ausgabe: �  �  �
Mit anderen Worten wurde hier ein ä als 11100100 gespeichert. In UTF-8 ist dieses Byte jedoch ungültig, wird also nicht angezeigt oder ignoriert, bzw. als ? oder dargestellt.

Auch hier lässt sich mit PHP's header()-Funktion nachhelfen, damit der Content als ISO-8859-1 interpretiert wird.
<?php
header
('Content-Type: text/html; charset=ISO-8859-1');
?>
In der .htaccess-Datei würde dies dann so aussehen:
AddDefaultCharset ISO-8859-1Oder aber man wendet utf8_encode() auf die Ausgabe an, um bei UTF-8 zu bleiben.

Anmerkung: Das Ändern des Meta-Tags im HTML-Dokument betreffend "Content-Type" zeigt meistens keine Wirkung, da diese Angabe die niedrigere Priorität gegenüber dem HTTP-Header hat. Allerdings sollte der Meta-Tag immer auch dem HTTP-Header entsprechen, da, wenn die Datei lokal gespeichert wird, die einzige Quelle der Kodierung nur noch der Meta-Tag ist.

Siehe auch:
 


Andere Einträge


Kommentare

#1
von Jarrol am 08.07.2010
VIELEN DANK ! Ich weiß nicht warum ich das bei anderen Artikeln über Umlautproblemen nicht so verstehen wollte, aber bei deinem tue ich das ! Und das tolle ist das alles funktioniert :-). Ich bin froh die Seite gefunden zu haben. Ich werde sie jetzt erstmal speichern, damit ich immer wieder drauf zurückgreifen kann, wenn ich ein Umlautproblem habe. Nochmals ganz grossen Dank. Der Artikel war meine Rettung !

#2
von handynetz24 am 22.03.2011
Toller Artikel super geeignet wenn man nicht weiß wie es geht! Aber wie geht das mit html?

#3
von Julian am 23.02.2012
@handynetz24:
Bei HTML sollte man die entsprechenden Entitäten, wie &auml; für ä &ouml; für ü usw. nehmen, wie auch für andere Sonderzeichen (<>ß"....)
Siehe http://de.selfhtml.org/html/referenz/zeichen.htm

#4
von Stavros Kourtidis am 06.07.2012
Hi,
in der gennanten Website im habe ich das Menu durch ein php.inculde eingesetzt. Dazu habe ich in der .htaccess Datei folgendes eingegeben:
AddType application/x-httpd-php .htm .html
AddHandler x-httpd-php .htm .html
AddDefaultCharset ISO-8859-1

Den Charset habe ich eingegeben (Habe ich hier abgelesen), weil im Linktext das Wort Rätselspiele mit einem � vesehen war. Also nehme ich an das zweite Beispiel auf deiner Seite.
Im Artikeltext der Website aber, erscheinen die Umlaute nach dem ersten Beispiel.

Beide Befehle kann ich ja nich eingeben, wie gehe ich vor?

Bitte auch eine Mail wenn die Antwort kommt. (Fals nicht automatisch)

#5
von Gerhard Kessler am 03.12.2012
Ich musste in einer Site, die mit UTF-8 codiert war, die Ausgabe in iso-8859-1 realisieren.
Danke für die SUPER-Info auf dieser Site. Hat mir sehr geholfen.
Ich ziehe meinen Hut.
Gerhard Kessler

#6
von Chris am 05.01.2013
Hatte bei einer Formular-Extension das Umlautproblem. Mit dem AddDefaultCharset UTF-8 Befehl in der htaccess hat es auf Anhieb geklappt (welch Freude nach dem stundenlangen Suchen davor) - Vielen Dank!

#7
von Walter am 05.03.2013
Ich kann mich dem Beitrag 1 von Jarrol nur anschliessen!

Keine Ahnung, warum ich andere Artikel zu dieser Problematik nicht verstanden habe, aber dieser hat's gebracht! Herzlichen Dank für die verständliche Hilfe!

#8
von Ens am 09.04.2013
Danke. Hat mir sehr geholfen. Weiter so.

#9
von Mathias am 03.06.2013
Wow, vielen Dank. An die .htaccess hätten wir als letztes gedacht. Hat gleich funktioniert.

Dickes Lob aus München

#10
von Frank am 24.07.2013
Muss meinen Vorrednern zustimmen, so erklärt hilft dies auch Neulingen und Beginnern. Großes Lob für die saubere und leicht verständliche Erklärung!

#11
von Alfred am 13.11.2013
Hallo Ich habe folgendes Problem

Auf der Adminseite geben ich ein ö ein das wird in der Datenbank als ö gespeichert. Im Adminbeirech als auch im Shopbereich wird das so einwandfrei als ö angezeigt. Wenn ich aber im Shopbereich (z.b. Konto eröffnen) ein ö erfasse so wird das in der Datenbak als 㶠gespeichert was wieder im Amdin als auch in Shop zu der Anzeige von � führt. Wo kann ich ansetzten um das Schreiben von Daten in dem richtigen Format zu erhalten?

#12
von Mathias am 13.11.2013
@Alfred:
Überprüfe ob die Tabellen der Datenbank alle das gleiche charset benutzen.

#13
von Nina am 04.06.2014
Hallo,
auch ich habe ein Charset-Problem: Zwar wird im Browser alles richtig dargestellt, beim Versenden des E-Mail-Formulars jedoch erhält der Empfänger fehlerhafte Darstellungen. Das ist besonders ärgerlich, weil es um Anmeldungen für einen Kindergarten geht. Wenn Umlaute im Namen vorkommen ist bei der Bürokraft heiteres Rätselraten angesagt. Wie kann ich dieses Problem lösen?

#14
von Homepage-erstellen am 20.07.2014
Auch viele unsere Kunden fragen immer, wieder nach vielen tips, wir empfehlen immer diese webseite, als basis wissen.

#15
von docodes am 13.10.2014
Vielen Dank für die nützlichen Informationen.

#16
von Sahagin am 30.10.2014
Vielen Dank, endlich kann ich ruhig schlafen!

#17
von Problem liegt hier an einer ganz anderen Stelle am 20.11.2014
benutzt man den charset=UTF-8 dann muss die entsprechende Datei auch als UTF-8 Kodiert abgespeichert werden. Man benötigt also gar keine zusätzlichen Befehle in seinem Quellcode.

#18
von Marianne am 28.11.2014
hallo, vielleicht könnt Ihr mir helfen? Meine Webseite wurde heackt, nun habe ich alles neu überspielt, funktioniert auch wieder, aber die Umlaute im Text werden nicht richtig angezeigt. Ich habe schon alle die hier beschriebenen Befehle eingearneitet, funktioniert trotzdem nicht. (neuste WP-version, 4.0.1, Theme twentytwelve)
Danke für Eure HIlfe
Marianne

#19
von Mykola am 08.02.2015
Man kann die Umlaute ersetzen mit ae,œ,ue Ausnahmen: Porträt= Portrait

#20
von Problem liegt hier an einer ganz anderen Stelle am 09.02.2015
benutzt man den charset=iso-8859-15 dann muss die entsprechende Datei auch als ANSI Kodiert abgespeichert werden. Man benötigt also gar keine zusätzlichen Befehle in seinem Quellcode.

benutzt man den charset=UTF-8 dann muss die entsprechende Datei auch als UTF-8 Kodiert abgespeichert werden. Man benötigt also gar keine zusätzlichen Befehle in seinem Quellcode.

So einfach kann es sein aber die Menschheit mag es kompliziert und das ist auch gut so. :)

#21
von H.Kaiser am 02.04.2015
Ich kann mich den anderen Lesern nur anschließen.
Alles auf den Punkt genau erklärt. So sollte es sein.
Eine Empfehlung wird es geben.
Danke für diese gute Seite.

#22
von Klaus am 29.04.2015
Danke!
Du warst meine Rettung, auch 6 Jahre nach Veröffentlichung sind Deine Tipps aktuell.

Jetzt kann ich endlich Text per php include richtig in einen UTF-8 Text einfügen.