HTML und Umlaute

maceis

Aktives Mitglied
Thread Starter
Dabei seit
24.09.2003
Beiträge
16.880
Reaktionspunkte
626
hallo zusammen,

in letzter Zeit nervt mich das tierisch, dass ich Umlaute etc. immer mit &...; schreiben muss.
Wenn ich die Umlaute ganz normal in den html-Text schreibe, werden Sie auch ordentlich angezeigt, allerdings nur, solange mein Browser auf "ISO Latin 1" eingestellt ist.
Sobald ich auf "UTF-8" umschalte, weden die Umlaute einfach ausgelassen.
Im head habe ich folgenden meta-Tag drin:
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
Nachdem "UTF-8" ja die Sonderzeichen alle hat, und am Computer beide Zeichensätze vorhanden sind, habe ich gehofft, dass die intern "übersetzt" werden können.

Nun meine Frage:
Gibt es eine praktikable Lösung, denn Quelltext mit normalen Sonderzeichen zu schreiben und trotzdem eine weitgehend korrekte Darstellung bei unterschiedlichen Browsereinstellungen zu erhalten?
 
Zuletzt bearbeitet:
Ja:
1.) Die Datei muss auch (im Editor oder der Datenbank) als UTF-8 abgespeichert worden sein.
2.) Der Server liefert die Datei auch als UTF-8 aus (httpd.conf oder .htaccess mittels AddDefaultCharset utf-8).
3.) Der von dir genannte meta-Tag ist redundant, wenn du deinen Server anweist, Dokumente als UTF-8 auszuliefern. Wenn du den meta-Tag aus anderen Gründen dennoch angibst, sollte der Charset auch auf utf-8 verweisen.

Fortan brauchst du deine Umlaute nicht mehr mit Entities zu maskieren.
 
schrein deinen htrml code ganz normal und lass dir dann die umlaute ä ü ö durch &uuml; etc. ersetzen.
kann ja jeder editor
 
...oder auswendig lernen... ;)

Ersetzen Sie das Zeichen ä durch die Zeichenfolge &auml;
Ersetzen Sie das Zeichen Ä durch die Zeichenfolge &Auml;
Ersetzen Sie das Zeichen ö durch die Zeichenfolge &ouml;
Ersetzen Sie das Zeichen Ö durch die Zeichenfolge &Ouml;
Ersetzen Sie das Zeichen ü durch die Zeichenfolge &uuml;
Ersetzen Sie das Zeichen Ü durch die Zeichenfolge &Uuml;
Ersetzen Sie das Zeichen ß durch die Zeichenfolge &szlig;

*hehehe*
 
Vielen Dank für Eure Antworten.

HAL schrieb:
so gehört sich das aber. alles andere ist schlechter stil. ;)
Mag sein, aber unbequem; So mach ich das ja auch seit Jahren; wenn es eine adäquate technische Lösung gibt, würde ich die gerne anwenden :D
Scribble schrieb:
Ja:
1.) Die Datei muss auch (im Editor oder der Datenbank) als UTF-8 abgespeichert worden sein.
2.) Der Server liefert die Datei auch als UTF-8 aus (httpd.conf oder .htaccess mittels AddDefaultCharset utf-8).
3.) Der von dir genannte meta-Tag ist redundant, wenn du deinen Server anweist, Dokumente als UTF-8 auszuliefern. Wenn du den meta-Tag aus anderen Gründen dennoch angibst, sollte der Charset auch auf utf-8 verweisen.

Fortan brauchst du deine Umlaute nicht mehr mit Entities zu maskieren.
Das klingt sehr gut. Eine Frage hätte ich da noch:
Gibt es ein Kommando(Shell, Perl, PHP etc.), mit dem ich eine beliebige Textdatei darauf testen kann, mit welcher Zeichensatz-Kodierung sie gespeichert ist?
Dem vim wird man ja wohl beibringen können, als utf-8 zu speichern :D
garraty47 schrieb:
schrein deinen htrml code ganz normal und lass dir dann die umlaute ä ü ö durch &uuml; etc. ersetzen.
kann ja jeder editor
Das wäre auch eine Möglichkeit; da ich aktualisierte Dateien ohnehin mit einem Skript hochlade, kann ich da auch noch eine Zeichenersetzung einbauen.

Der Vorschlag von Scribble kommt meinen Vorstellungen am nächsten.
 
Gibt es ein Kommando(Shell, Perl, PHP etc.), mit dem ich eine beliebige Textdatei darauf testen kann, mit welcher Zeichensatz-Kodierung sie gespeichert ist?
Am einfachsten machst du das, indem du dir die HTTP-Request-Header ausgeben lässt, z.B. über http://web-sniffer.net/ oder über die Mozilla-/Firefox-Webdeveloper-Extension (Response Headers). Im Mozilla-Kontextmenü gibt es auch den Punkt »Seiteninformationen anzeigen«; dort müsste der Content-Type/charset ebenfalls angezeigt werden.
 
Hallo,

HAL schrieb:
so gehört sich das aber. alles andere ist schlechter stil. ;)
Was soll denn daran schlecht sein, die Zeichen die der Zeichensatz beeinhaltet einfach zu verwenden?

gen2user
 
--- sorry; falscher Thread ---
 
maceis schrieb:
Gibt es ein Kommando(Shell, Perl, PHP etc.), mit dem ich eine beliebige Textdatei darauf testen kann, mit welcher Zeichensatz-Kodierung sie gespeichert ist?
Passt "file" für deinen Zweck oder ist es zu ungenau?


Gruß,

?=?
 
Zuletzt bearbeitet:
gen2user:
Was soll denn daran schlecht sein, die Zeichen die der Zeichensatz beeinhaltet einfach zu verwenden?

Nun ja, es ist eben Internet! Jeder kann mit dem Browser seiner wahl und den Einstellungen seiner Wahl die Seite betrachten. Soll er sie auch lesen können, muß man entweder bei allen Usern den gleichen Zeichensatz voraussetzen ( eher schlecht möglich), oder den Zeichensatz mit angeben. Desweiteren unterscheidet man zwischen den alten 8-Bit Zeichensätzen und den erweiterten neueren 16-Bit ( sogar 32-Bit gibt es). Hier unterscheidet sich dann Dein ä/ö/ü auch noch in der Speicherart! Gaanz einfach nur die Umlaute tippen führt leider zu mehr Verdruß als alles Andere!

Im Wesentlichen gebe ich Difool recht, die wichtigsten Zeichen kann man sich schon merken!
 
?=? schrieb:
Passt "file" für deinen Zweck oder ist es zu ungenau?
...
Tatsache. Da bekommt man einiges heraus.
Sinnvoll ist es den -i Switch einzuschalten, da dann das charset auch ausgegeben wird, wenn file z.B. ein Skript, Quellcode oder sowas erkennt.

Jetzt wäre nur noch ein Skript nötig, dass mir die encodings umwandelt, ohne die Buchstaben zu "zerhauen".
Mal sehn, ob da mit Perl was geht.

@Scribble:
Das funktioniert zwar sehr schön, wenn der Benutzer im Browser UTF-8 tatsächlich eingestellt hat.
Wenn der Browser aber auf Latin-1 steht, gibt er "seltsame" Zeichenkombinationen aus.
Hab ich da jetzt was falsch gemacht?
 
wegus schrieb:
...
Nun ja, es ist eben Internet! Jeder kann mit dem Browser seiner wahl und den Einstellungen seiner Wahl die Seite betrachten. Soll er sie auch lesen können, muß man entweder bei allen Usern den gleichen Zeichensatz voraussetzen ( eher schlecht möglich), oder den Zeichensatz mit angeben.
...
Das ist es ja gerade; selbst, wenn ich den Zeichensatz mit angebe, kommt nur Müll raus, wenn der Benutzer einen anderen Zeichensatz eingestellt hat.
wegus schrieb:
...
Im Wesentlichen gebe ich Difool recht, die wichtigsten Zeichen kann man sich schon merken!
Um´s Merken geht es gar nicht, mehr um die Bequemlichkeit und die geschwindigkeit beim Tippen. Wenn´s nicht anders geht, werd ich wohl doch noch mal mit Pattern-Substitution arbeiten.

@wggf
Danke für den Tip, aber das ist mir zu kompliziert.
Da muss ich ja alles von Hand machen; dann kann ich gleich Entities tippen :D.

Meine Vorstellung sieht so aus:
1. Ich schreib den Code wie mir der Finger gewachsen ist.
2. Dann tipp ich im Terminal ein Kommando ein und alles Dateien, die neuer sind als seit dem letzten Upload werden auf den Server geladen.
3. Alles ist gut ;)

Im Prinzip ist das auch so machbar.
Hab mich nur gefagt, ob im Quelltext am Ende wirklich &uuml; statt ü stehen muss.
Wenn es so ist, kann ich damit leben.
 
Zuletzt bearbeitet:
Das funktioniert zwar sehr schön, wenn der Benutzer im Browser UTF-8 tatsächlich eingestellt hat.
Wenn der Browser aber auf Latin-1 steht, gibt er "seltsame" Zeichenkombinationen aus.
Ja, ist ja auch richtig so ;) Aber da ja der Zeichensatz konkret deklariert und ausgeliefert wird, schalten die Browser automatisch auf den jeweiligen Zeichensatz um und zeigen die Umlaute auch korrekt an. Wenn du im Nachhinein die Browser-Textkodierung änderst (z.B. auf Latin-1), werden die Umlaute natürlich zerschossen dargestellt.
 
maceis schrieb:
...
Im head habe ich folgenden meta-Tag drin:
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">

Hallo maceis,

Dein Meta-Tag ist falsch. Versuche folgenden Meta-Tag bitte:

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

Viele Grüße
Michael
 
Zuletzt bearbeitet:
Scribble schrieb:
Ja, ist ja auch richtig so ;) Aber da ja der Zeichensatz konkret deklariert und ausgeliefert wird, schalten die Browser automatisch auf den jeweiligen Zeichensatz um und zeigen die Umlaute auch korrekt an. Wenn du im Nachhinein die Browser-Textkodierung änderst (z.B. auf Latin-1), werden die Umlaute natürlich zerschossen dargestellt.
Vielen Dank für Deine Hilfe.
So langsam blick ich durch. Funktioniert soweit sehr schön.

Was ich nicht verstehe, ist, dass mir Dateien mit der Endung .php von "file -i" immer als "us-ascii" angezeigt werden und nicht als "utf-8".
Das mag daran liegen, dass (afair) die unteren 256 Zeichen bei beiden identisch sind.

Dateien mit der Endung .html werden meist korrekt als "utf-8" bezeichnet, manchmal wird gar keine Kodierung ausgegeben.

Ansonsten: prima Sache :D.

mikne21 schrieb:
Hallo maceis,

Dein Meta-Tag ist falsch. Versuche folgenden Meta-Tag bitte:

<meta http-equiv="content-type" content="text/html; charset=utf-8">
...l
Danke für den Tip.
Wenn man die Methode von Scribble anwendet, benötigt man gar keinen charset angeben.
 
Zuletzt bearbeitet:
Was ich nicht verstehe, ist, dass mir Dateien mit der Endung .php von "file -i" immer als "us-ascii" angezeigt werden und nicht als "utf-8".
Ist mir jetzt auf Anhieb auch nicht klar. (Ist »AddDefaultCharset utf-8« im Root/.htaccess oder in der httpd.conf platziert? Was sagt php.ini's default_charset?)
Code:
<? header("Content-type: text/html; charset=utf-8"); ?>
sollte das zwar beheben können, ist aber natürlich nicht so elegant.
Wenn man die Methode von Scribble anwendet, benötigt man gar keinen charset angeben.
Das ist richtig, weil es online redundant ist. Es ist nichtsdestotrotz sinnvoll, den Meta-Tag anzugeben, weil es offline Bugs z.B. in Mozilla ausbügelt: Lokal abgespeicherte Seiten senden keine Request-Headers. Die Seiten werden also in UTF-8 lokal gesichert, aber nicht mit diesem Zeichensatz geöffnet. Und dann sind die Umlaute beim nächsten Öffnen wieder kaputt.
 
maceis schrieb:
Was ich nicht verstehe, ist, dass mir Dateien mit der Endung .php von "file -i" immer als "us-ascii" angezeigt werden und nicht als "utf-8".
"file" kann's den bytes halt nicht ansehen mit welcher Absicht (=welcher Kodierung) sie geschrieben wurden.
Es gibt keine "Magic Numbers" anhand derer "file" irgendwas konkretes identifizieren kann. Bei HTML gibt's noch die charset-Angabe, die "file" nutzen kann (mangels PHP-Kenntnissen gehe ich davon aus, das sowas in PHP-Skripten nicht standardmäßig am Anfang steht, oder?).

Was dann noch an Merkmalen zu Klassifizierung bleibt sind allenfalls ein paar Heuristiken (vgl. man file) . . .


Gruß,

?=?
 
Scribble schrieb:
...
Lokal abgespeicherte Seiten senden keine Request-Headers. Die Seiten werden also in UTF-8 lokal gesichert, aber nicht mit diesem Zeichensatz geöffnet. Und dann sind die Umlaute beim nächsten Öffnen wieder kaputt.
Gilt das auch, wenn ich mir die Seiten nur mit dem lokalen Webserver oder nem Texteditor ansehe? Eher nicht, oder?
 
Zurück
Oben Unten