Zeichensatz - Problem
Connie
- https
Hallo,
ich habe ein leidiges Problem: eine Datei mit russischem Zeichensatz wird auf einem Server richtig, auf einem anderen Server falsch angezeigt, der Zeichensatz wird nicht erkannt.
der HEader der Datei:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
auch andere kyrillische Zeichensätze verhielten sich identisch.
Ich habe beide Seiten mit mehreren Browsern aufgesucht, immer gleiches Ergebnis.
Also muss es wohl an der Serverkonfiguration liegen, und da weiß ich
nicht,wo ich drehen kann...
richtig: http://www.terterian.org/uml/
falsch: http://www.zweiterblick.de/zweiterblick/index.html
habt Ihr einen Rat? Dann könnte ich mich getrost auf mein Rasenbett zurückziehen;=)
Connie
Hallo,
ein richtiger "Russen-Tag" heute;-)
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
Vergiss META.
Den Zeichensatz gibt man per HTTP an. META ist eine Kruecke.
Also muss es wohl an der Serverkonfiguration liegen, und da weiß ich
nicht,wo ich drehen kann...
Dein Verdacht ist richtig.
http://cgi.w3.org/cgi-bin/headers sagt mir, dass
die Server die Dateien wie folgt ausliefern:
richtig: http://www.terterian.org/uml/
Content-Type: text/html
=> also keine Angabe zum Charset im HTTP-Header;
folglich schauen die Browser wohl doch ins META-Tag.
Content-Type: text/html; charset=iso-8859-1
=> diese Angabe im HTTP-Head wird von den Browsern staerker gewichtet
als die META-Kruecke.
habt Ihr einen Rat? Dann könnte ich mich getrost auf mein Rasenbett zurückziehen;=)
Versuche, den Server so zu konfigurieren, dass er das
richtige Charset angibt. Das geht wahrscheinlich nur
auf einer "per-directory" Basis, also fuer ein ganzes
Verzeichnis auf einmal.
Beim Apachen legt man dafuer eine .htaccess-Datei ins Verzeichnis,
mit folgendem Inhalt:
AddDefaultCharset iso-8859-1
Auch andere Varianten sind mit .htaccess moeglich.
Voraussetzung ist, dass Dein Webhost ueberhaupt
die Konfiguration mittels .htaccess zulaesst.
HTH, mfg + do swidanja
Thomas
Hallo nochmal,
Sorry, kleiner Fehler:
AddDefaultCharset iso-8859-1
Sollte natuerlich heissen:
AddDefaultCharset windows-1251
Besser waere wohl das entsprechende iso-8859-X.
mfg
Thomas
Hallo,
ein richtiger "Russen-Tag" heute;-)
da, eta pravda...
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
Vergiss META.
Den Zeichensatz gibt man per HTTP an. META ist eine Kruecke.
ja, aber geht manchmal eben nicht anders
Das geht wahrscheinlich nur auf einer "per-directory" Basis,
tja, und also habe ich ein Problem. Der Server gehört mir natürlich gar nicht, ich kann also nur selbst mit der .htaccess-Datei das Verzeichnisweise regeln und dafür muss ich das ganze Projekt auseinanderbauen... ist dort nämlich in deutsch, russisch, französisch und englisch vorhanden (die Reise nach Petuschki z.B.)
Auch andere Varianten sind mit .htaccess moeglich.
Voraussetzung ist, dass Dein Webhost ueberhaupt
die Konfiguration mittels .htaccess zulaesst.
ja das tut er, oder wird er müssen ;=(
HTH, mfg + do swidanja
poka,
Connie
Hi Connie,
tja, und also habe ich ein Problem. Der Server gehört mir natürlich gar nicht, ich kann also nur selbst mit der .htaccess-Datei das Verzeichnisweise regeln und dafür muss ich das ganze Projekt auseinanderbauen... ist dort nämlich in deutsch, russisch, französisch und englisch vorhanden (die Reise nach Petuschki z.B.)
kannst Du die jeweilige Sprachvariante durch ein Muster des Dateinamens erkennen? (Würde sich ja anbieten, entsprechende Endungen zu verwenden und dann Content Negotiation zu machen.)
Du kannst innerhalb von .htaccess Direktiven wie
http://httpd.apache.org/docs/mod/core.html#filesmatch
verwenden - und damit die Kodierung für jede Sprache individuell setzen.
Viele Grüße
Michael
kannst Du die jeweilige Sprachvariante durch ein Muster des Dateinamens erkennen? (Würde sich ja anbieten, entsprechende Endungen zu verwenden und dann Content Negotiation zu machen.)
das reizt mich, *.rhtml = russich, *.ehtml = englisch, *.fhtml = französisch, *.dhtml = deutsch
das ist gut, aber was passiert, wenn ich PHP-Dateien einsetze?
dann werde ich doch verzeichnisweise arbeiten müssen oder ich schalte AddDefaultCharSet Off und alles wird aus den META-Direktiven im Header genommen?
Gruss,
Connie
Hallo Connie,
das ist gut, aber was passiert, wenn ich PHP-Dateien einsetze?
Dann kannst Du am Anfang dieser PHP-Dateien mit
Header ('Content-Type: text/html; charset=...');
die Zeichenkodierung auch selbst festlegen, _ohne_ in die Apache-Konfiguration zu müssen. (Genaugenommen hat die Apache-Konfiguration in dieser Hinsicht bei CGI-Scripten keinen Effekt, weil diese ihre Content-Type-Header alle selbst erzeugen; PHP macht das im Normalfall automatisch (und sendet einfach nur 'text/html'), Du kannst aber auch selbst so eine Angabe machen)
Viele Grüße,
Christian
Danke!
Ich werde mir das genauer ansehen und dann startet das große Aufräumen;=)
Hi Connie,
das reizt mich, *.rhtml = russich, *.ehtml = englisch, *.fhtml = französisch, *.dhtml = deutsch
nein - natürlich nicht so. Dann müßtest Du ja die Links für jede Sprache unterschiedlich setzen.
Statt dessen: russisch = *.html.ru, deutsch = *.html.de, französisch = *.html.fr, und die Default-Sprache Deiner Wahl = *.html.html.
Deine Links setzt Du trotzdem nur auf *.html! Welche Datei dadurch adressiert wird, das herauszufinden macht eben Apaches mod_negotiation für Dich, anhand der vom Browser übermittelten Sprache.
Irgendjemand hat unter
http://aktuell.de.selfhtml.org/artikel/server/alt-http/
auch so einen komischen Artikel zu diesem Thema geschrieben ...
das ist gut, aber was passiert, wenn ich PHP-Dateien einsetze?
Dasselbe. Entscheidend ist die Differenz zwischen dem verlinkten und dem tatsächlich existierenden Dateinamen - das ist die "Verhandlungmasse". (Die übrigens sogar aus mehreren "Dimensionen" bestehen darf - "Sprache" ist keineswegs die einzig mögliche.)
dann werde ich doch verzeichnisweise arbeiten müssen oder ich schalte AddDefaultCharSet Off und alles wird aus den META-Direktiven im Header genommen?
Meiner Meinung nach funktioniert die Auswertung von HTTP-Headern zuverlässiger als diejenige von <meta>-Tags. Deshalb würde ich davon Abstand halten, dieselbe Information an zwei Stellen (und womöglich auch noch widersprüchlich) auszuliefern. Du mußt Dir dann halt bewußt sein, daß Deine .htaccess-Dateien elementarer Bestandteil Deines Content geworden sind ...
Viele Grüße
Michael
Hallo Michael,
das ist gut, aber was passiert, wenn ich PHP-Dateien einsetze?
Dasselbe.
Wenn es um Content Negotiation im Sinne von 'aus unterschiedlichen Dateien auswählen' geht, gebe ich Dir Recht. Da es hier allerdings um den Content-Type-Header geht, muss ich Dir widersprechen. Denn PHP sendet automatisch ein Content-Type: text/html (bzw. etwas anderes, was in der php.ini eingestellt ist) und überschreibt somit jegliche Art von Header, die der Apache vorher sich vorgemerkt haben könnte. (was der Apache hier aber vermutlich auch nicht tut, da der Content-Type application/x-httpd-php beim Apache entweder den PHP-CGI-Handler auslöst oder vom PHP-Modul abgefangen wird (je nach Art der Konfiguration))
Viele Grüße,
Christian
Hallo Christian,
Denn PHP sendet automatisch ein Content-Type: text/html (bzw. etwas anderes, was in der php.ini eingestellt ist) und überschreibt somit jegliche Art von Header, die der Apache vorher sich vorgemerkt haben könnte.
ich denke, es funktioniert anders herum: Apache fängt den PHP-Output auf und _ergänzt_ fehlende Header. Mit mod_headers müßte man die PHP-Ausgabe mit Gewalt überschreiben können.
Viele Grüße
Michael
Statt dessen: russisch = *.html.ru, deutsch = *.html.de, französisch = *.html.fr, und die Default-Sprache Deiner Wahl = *.html.html.
ach herrjemine... Michael danke, jetzt habe ich genug zu kauen und muss mir nur noch die Zeit suchen zum ausprobieren
es ist doch immer wieder faszinierend für mich, wie man immerfort auf neue Themen stößt, die man schon mal gehört hat, die aber nun plötzlich ganz wichtig werden...
danke und Gruss,
Connie
als kleiner Gruß ein Schild, das ich heute nach dem Harley-DAvidson-Wochenende in Hamburg bei mir um die Ecke entdeckte..
sagen wir mal, CharacterEncoding ist Mist... (bis man es richtig verstanden hat..)
Hi Connie,
sagen wir mal, CharacterEncoding ist Mist... (bis man es richtig verstanden hat..)
abgesehen von den historischen Fehlentwicklungen (weil die Amis mit ASCII einen Standard durchgesetzt haben, der gerade bis an deren Tellerrand reicht) und den diversen Gegenmaßnahmen (HTML-Entities, URL-Encoding, Unicode usw.): Die Auswirkungen, die Du bei Character-Encoding erlebst, sind zum Teil das Ergebnis eines Zuständigkeitsproblems.
Ein HTML-Dokument wird via HTTP transportiert; wer von beiden ist zuständig für die Beschreibung der Interpretationsvorschrift für den Inhalt? Beide "Protokollschichten" versuchen es (und XML versucht es ebenfalls); entsprechend chaotisch ist das Ergebnis, weil man nicht nur sämtliche möglichen Mechanismen verstehen muß, sondern zu allem Überfluß auch noch, wie diverse Programme mit widersprüchlichen Informationen zurecht kommen, die aufgrund dieser Mechanismen auftreten können ...
Würden sich alle Beteiligten darauf einigen, daß HTTP-Informationen nach HTTP gehören und nicht in die Dokumente hinein, dann gäbe es <meta http-equiv> und Ähnliches gar nicht. Aber dann würde man sich bei der Verwendung von HTML (und XML) auf den Transport via HTTP festlegen!
Das wiederum ist gerade angesichts der vielfältigen Möglichkeiten von XML auch nicht erwünscht ... und was tut man, wenn jemand ein HTML-Dokument als attachment einer Mail versendet, wobei die HTTP-Header der Original-Auslieferung ggf. verloren gehen?
Fragen über Fragen ...
Viele Grüße
Michael
Michael,
sagen wir mal, CharacterEncoding ist Mist... (bis man es richtig verstanden hat..)
genau;=(
Fragen über Fragen ...
nun, mein Problem ist erstmal gelöst:
alle Dateien haben eine aktuelle Doctype-Angabe
alle Dateien enthalten keine content-type-Angaben mehr
alle Dateien sind in Unicode gespeichert
im Verzeichnis ist eine .htaccess mit der Direktive "AddDefaultCharset utf-8" und alle Browser, die auf "automatische Zeichensatzerkennung" konfiguriert sind, zeigen nun UNICODE (wenn sie denn Unicode darstellen können..)
nun denke ich, habe ich wieder lesbare Seiten und werde nach und nach alle Arbeiten, die mehrsprachig vorliegen, in UNICODE umsetzen und dann is Ruhe im Karton
ich danke dir,
Connie
Dobri viedscher,
Ich versuche, noch ein paar Ideen als Ergaenzung zu Michaels
Posting zu liefern.
[Apache: HTTP-Charset-Header mittels .htaccess festlegen]
Das geht wahrscheinlich nur auf einer "per-directory" Basis,tja, und also habe ich ein Problem. Der Server gehört mir natürlich gar nicht, ich kann also nur selbst mit der .htaccess-Datei das Verzeichnisweise regeln und dafür muss ich das ganze Projekt auseinanderbauen... ist dort nämlich in deutsch, russisch, französisch und englisch vorhanden (die Reise nach Petuschki z.B.)
OK, ich sehe Dein Problem.
Wie viele russische Dateien hast Du denn? (=> Aufwand-Abschaetzung)
(Fuer die andern sollte ja ISO-8859-1 ausreichen, also kannst Du
sie auf jeden Fall in einem Verzeichnis lassen.)
Wenn Du die Dateien nicht in verschiedene Verzeichnisse
verteilen willst, kannst Du vielleicht einen Trick mit
"speziellen" Datei-Endigungen versuchen.
Dann kannst Du dieser speziellen Endigung das Charset zuordnen.
Z.B. reise.html.ru
Je nach Konfiguration zeigt der Server die Datei auch an,
wenn der Browser nur reise.html verlangt und es die einzige
Datei reise.html* ist.
Das ganze hat mit Content Negotiation und Multiviews zu tun:
http://httpd.apache.org/docs/content-negotiation.html
Ich habe es selbst noch nie angewendet; der folgende Vorschlag
fuer eine .htaccess ist frei erfunden:
----------------
Options +MultiViews
AddDefaultCharset iso-8859-1
AddCharset WINDOWS-1251 .ru
AddLanguage ru .ru
----------------
Falls das mit der Endigung .html.ru nicht hinhaut, koenntest Du
einen noch billigeren Trick nehmen:
.html fuer Dateien in Englisch, Deutsch u.s.w.
.htm fuer Dateien in Russisch
Braucht einfach etwas mehr Disziplin beim Linksetzen u.s.w.
Die .htaccess wuerde dann so aussehen:
----------------
AddDefaultCharset iso-8859-1
AddCharset WINDOWS-1251 .htm
AddCharset iso-8859-1 .html
----------------
Oder Du definierst gleich eine Fantasie-Endigung
fuer die russischen Dateien, z.B. .rhtml
Die .htaccess wuerde dann zu:
----------------
AddDefaultCharset iso-8859-1
AddType text/html .rhtml
AddCharset WINDOWS-1251 .rhtml
----------------
Zum Thema "Webhoster und MultiViews": Vergleiche auch den Thread:
http://forum.de.selfhtml.org/archiv/2002/3/5959/
Zum Thema "Content Negotiation/MultiViews" siehe auch:
http://selfhtml.teamone.de/diverses/htaccess.htm#alternative_inhalte
http://www.bowiesnyder.com/writings/nls_apache.htm
So, jetzt hast Du mal was zum kauen und ausprobieren!
mfg + viel Glueck!
Thomas
Hi Thomas,
Dobri viedscher,
Ne, du verwechselst da was. Ein "viedscher" ist im sächsischen Sprachraum so etwas wie ein Merkmal, der Angelsachse nennt es auch "feature". Du meinst aber sicher "wjetscher".
*SCNR*
Viele Grüße
Torsten
privet Thomas,
So, jetzt hast Du mal was zum kauen und ausprobieren!
ja, das habe ich
ich werde mir am Wochenende Zeit nehmen und das alles ausprobieren
es ist interessant, in neue Gebiete vorzustoßen, bis jetzt habe ich mich immer um die Apache-Konfiguration drücken können und die Handbücher stehen eher als "eherne Reserve" im Regal
danke für die vielen Anregungen
das mit den verschiedenen Endungen hatte ich irgendwie im Hinterkopf, ich glaube, das versuche ich
spasibo,
Connie