[PHP] Umlaute- / Sonderzeichenproblem

AMD-Hammer

Grand Admiral Special
Mitglied seit
05.10.2003
Beiträge
2.760
Renomée
123
Standort
Bornheim (Rheinland)
Hi Leute,

ich sitze hier gerade vor einem Webserver auf den gerade PHP 4.x, Apache 2 und MySQL aufgespielt wurde und verzweifle ein wenig.
Zwar läuft alles miteinander und scheint auch soweit fehlerfrei zu funktionieren, aber irgendwie zeigt mir der Browser alle Umlaute als "?". Die Umlaute stehen sowohl in der Datenbank (in der sie im übrigen auch korrekt drin stehen, wenn man mit phpMyAdmin nachschaut) als auch in den PHP Dateien selber. Da das dort laufende System nicht von mir geschrieben wurde und ich ungerne jede der ~ 50 Dateien bearbeiten würde dachte ich mir, es muss ja noch eine andere Lösung geben.

Interessanterweise funktionierte ja auf dem alten Server alles mit den Umlauten wunderbar. Trotz, dass die Umlaute in den Dateien und in der Datenbank nicht im HTML Code ( also zB ü ) stehen.

Kennt einer das Problem? Muss doch da bestimmt was in der php.ini ändern um die lokalisierung zu ändern, oder!!??

Danke schonmal im vorraus
 
Wie soll der arme Webserver denn Umlaute darstellen wenn diese im zugrunde liegenden Zeichensatz nicht aufgeführt sind? Du musst in der config das charset auf ISO-8859-15 stellen, per default steht dies warscheinlich auf UTF-8.

Btw: Ein Redakteur ist des googlens nicht fähig? :o
 
Tach,

ich nehme an die zwei Server liefern die Dateien mit einer unterschiedlichen Zeichensatzangabe aus. Wenn dem so ist, solltest du die Zeichensatzangabe entweder in der Webserverkonfiguration anpassen oder per PHP mittels header Funktion versenden.

Wenn du die Seite öffnest und dann im Browser nachschaust, welcher Zeichensatz verwendet wurde, (unter Firefox Ansicht --> Zeichenkodierung) was steht da?

Ciao
Phil
 
Btw: Ein Redakteur ist des googlens nicht fähig? :o
8-( 8-( Darf man als Redakteur keine Fragen haben, oder was?? ?? ??

Und im übrigen sollte der arme Webserver das im Std. eigentlich können (jedenfalls tun das meine privaten Server). Dummerweise habe ich den nicht eingerichtet und darf jetzt nur flicken und basteln.

Tach,

ich nehme an die zwei Server liefern die Dateien mit einer unterschiedlichen Zeichensatzangabe aus. Wenn dem so ist, solltest du die Zeichensatzangabe entweder in der Webserverkonfiguration anpassen oder per PHP mittels header Funktion versenden.

Wenn du die Seite öffnest und dann im Browser nachschaust, welcher Zeichensatz verwendet wurde, (unter Firefox Ansicht --> Zeichenkodierung) was steht da?

Ciao
Phil

Als Zeichenkodierung nennt mir Firefox (bzw. Iceweasel) UTF-8. Auf dem anderen Server nimmt er ISO-8859-1. Mhhh... muss ich mal in der Webserverkonfiguration nachkramen ob ich die Zeichenkodierung finde.
Wie genau der Eintrag heißt, wisst ihr nicht zufällig aus dem Kopf oder???
 
8-( 8-( Darf man als Redakteur keine Fragen haben, oder was?? ?? ??

Sicher doch ;)

Und im übrigen sollte der arme Webserver das im Std. eigentlich können (jedenfalls tun das meine privaten Server). Dummerweise habe ich den nicht eingerichtet und darf jetzt nur flicken und basteln.

Das "Problem" tritt wohl seit Apache 2.2 auf, privat bist du scheinbar auf älteren Versionen unterwegs.

Als Zeichenkodierung nennt mir Firefox (bzw. Iceweasel) UTF-8. Auf dem anderen Server nimmt er ISO-8859-1. Mhhh... muss ich mal in der Webserverkonfiguration nachkramen ob ich die Zeichenkodierung finde.
Wie genau der Eintrag heißt, wisst ihr nicht zufällig aus dem Kopf oder???

Siehe: http://httpd.apache.org/docs/2.2/de/mod/core.html#adddefaultcharset

Du hast zwei Lösungsmöglichkeiten, entweder stellst du es fest auf ISO-8859-1 bzw. ISO-8859-15
Oder du deaktivierst die Funktion komplett so das die charset Angabe aus den Meta-tags interpretiert wird.
 
Ich hab mir nochmal die php.ini zu Gemüte geführt und bin auf den Eintrag "default_charset" gestoßen (war der schon immer da *pfeif*)

Dort musste ich einfach nur den Wert auskommentieren und schon liefs
; PHP's built-in default is text/html
default_mimetype = "text/html"
;default_charset = "iso-8859-1"

@Spontan

Danke für die Tipps. Die beiden Lösungswege vom Apache-Team selber hätten wohl auch funktioniert ;)
 
Wie soll der arme Webserver denn Umlaute darstellen wenn diese im zugrunde liegenden Zeichensatz nicht aufgeführt sind? Du musst in der config das charset auf ISO-8859-15 stellen, per default steht dies warscheinlich auf UTF-8.
UTF-8 enthält die Umlaute sehr wohl (wie so ziemlich alle anderen Zeichen, die irgendwo auf der Welt genutzt werden), sie sind nur anders codiert als bei ISO-8859-15. ;)
 
Richtig, aber nur wenn die UTF-8-Kodierung in mehreren Byteketten vorliegt. Oft ist es jedoch so das UTF-8 mit einem Byte kodiert wird was dann dem Zeichenvorrat von ASCII entstpricht.
 
Zuletzt bearbeitet:
Richtig, aber nur wenn die UTF-8-Kodierung in mehreren Byteketten vorliegt. Oft ist es jedoch so das UTF-8 mit einem Byte kodiert wird was dann dem Zeichenvorrat von ASCII entstpricht.
Beschäftige Dich mal mit Unicode, Du scheinst davon nicht wirklich Ahnung zu haben. ;) Stichwort Surrogate Code Points. ;)
Unicode ist ein Zeichensatz, dessen Ziel ist, alle weltweit genutzten Zeichen formal zu definieren. Codierungen gibt es im wesentlichen 3 verschiedene: UTF-32, bei dem jedes Zeichen durch 4 Byte codiert ist, UTF-16, bei dem die häufigsten Zeichen durch 2 Byte und alle anderen durch 3 oder 4 Byte codiert sind, UTF-8, bei dem die häufigsten Zeichen durch 1 Byte und alle anderen durch 2, 3 oder 4 Byte codiert sind.
Wie unterscheidet man bei UTF-8 (analog bei UTF-16) nun mit wieviel Byte das Zeichen, also der Code Point, codiert ist? Ganz einfach: Anhand der Surrogate Code Points. Hat das fragliche Byte (x) einen bestimmten Wert, codiert das nächste Byte (x+1) nicht den nächsten Code Point (y+1), sondern zusammen mit x den Code Point y.

Wenn Software UTF-8 fest mit 1 Byte codiert, ist das nicht wirklich UTF-8.
 
MMhhh die Zeichenkodierung kann natürlich nichts dafür: Wenn man ein UTF-8 kodiertes Zeichen in 8 Bit quetscht kann hinten ja nur noch ASCII rauskommen! So wie es bei PHP leider lange der Fall war, nichts anderes hatte ich mit meinem oberen Posting gemeint.

Wie Unicode aufgebaut ist brauchst du mir glücklicherweise nicht zu erklären, sonst hätte ich hier sicherlich nicht gepostet ;)
 
Zurück
Oben Unten