HTML und Umlaute

maceis

Mitglied
Thread Starter
Mitglied seit
24.09.2003
Beiträge
16.860
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:

Scribble

Mitglied
Mitglied seit
23.08.2004
Beiträge
523
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.
 

garraty47

Mitglied
Mitglied seit
18.11.2004
Beiträge
547
schrein deinen htrml code ganz normal und lass dir dann die umlaute ä ü ö durch &uuml; etc. ersetzen.
kann ja jeder editor
 

Difool

Frontend Admin
Mitglied seit
18.03.2004
Beiträge
11.249
...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*
 

maceis

Mitglied
Thread Starter
Mitglied seit
24.09.2003
Beiträge
16.860
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.
 

Scribble

Mitglied
Mitglied seit
23.08.2004
Beiträge
523
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.
 

gen2user

Mitglied
Mitglied seit
29.04.2004
Beiträge
69
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
 

maceis

Mitglied
Thread Starter
Mitglied seit
24.09.2003
Beiträge
16.860
--- sorry; falscher Thread ---
 

?=?

Mitglied
Mitglied seit
09.02.2004
Beiträge
950
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:

wegus

Mitglied
Mitglied seit
13.09.2004
Beiträge
16.999
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!
 

maceis

Mitglied
Thread Starter
Mitglied seit
24.09.2003
Beiträge
16.860
?=? 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?
 

maceis

Mitglied
Thread Starter
Mitglied seit
24.09.2003
Beiträge
16.860
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:

Scribble

Mitglied
Mitglied seit
23.08.2004
Beiträge
523
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.
 

mikne64

Mitglied
Mitglied seit
02.04.2004
Beiträge
3.272
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:

maceis

Mitglied
Thread Starter
Mitglied seit
24.09.2003
Beiträge
16.860
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:

Scribble

Mitglied
Mitglied seit
23.08.2004
Beiträge
523
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.
 

?=?

Mitglied
Mitglied seit
09.02.2004
Beiträge
950
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ß,

?=?
 

maceis

Mitglied
Thread Starter
Mitglied seit
24.09.2003
Beiträge
16.860
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?