Der Browser speichert zwar die Datei auf der Platte, so wie er sie bekommen hat. Aber beim nächsten Lesen von der Platte, ist kein HTTP-Header mehr vorhanden. Wenn dann keine Angabe im HTML-Head steht, kann der Lesende nur noch raten.
Okay, irgendwie hatte ich wohl angenommen, dass es darüber Metadaten (wie Erstellungs- und Änderungsdatum etc.) gibt. Denn meistens wenn ich eine Textdatei in einem Editor öffne weiß dieser wie sie kodiert ist, auch wenn ich sie mit einem anderen Editor erstellt habe.
Aber stimmt klappt auch nicht immer. Entweder die Editoren raten sehr gut oder es kommt aufs Dateisystem an (keine Ahnung was die Inhaltstabellen da jeweils erlauben) oooder manche Editoren legen es irgendwie ab und manche nicht XD
Es gibt keine andere Möglichkeit, die Kodierung des Dateiinhalts zu kennzeichnen. Da muss dein Geschmack der Praktikabilität wegen zurückstecken.
ACK
Nun es hätte durchaus sein können, dass der Parser das von selbst tut oder dass SQL davon ausgeht, dass es den Zeichensatz kriegt, den ich dort eingestellt habe.
Na klar, aber wo hast du das denn eingestellt? Die Kodierungsangabe eines Feldes ist irrelevant. Jedes Feld kann seine eigene Angabe haben. MySQL nimmt für die Daten, die über eine Verbindung zum Client kommen, einen separaten Konfigurationswert. Und wenn du jedes Datum extra kodieren willst, kannst du sogar jeden String-Wert einzeln kennzeichnen (braucht man normalerweise nicht).
Auf drei Ebenen habe ich utf-8 eingestellt:
allgemeine Variablen:
character set client, character set connection, character set results, character set system, collation connection (hier allerdings utf8_general_ci)
Zweite Ebene, die "Kollation" der Tabelle und
dritte Ebene, auch die "Kollation" der jeweiligen Datenfelder.
Ich muss aber zugeben, dass bei den Variablen hier und da auch "latin" oder "latin1_swedish_ci" steht. (v.a. unter "Globaler Wert"). Ich kenne mich mit SQL schon mehr schlecht als Recht aus, die Tiefen von MySQL verstehe ich nun gar nicht :)
Da fehlt noch die Kontextwechselbeachtung, also ein htmlspecialchars().
Stimmt, bei manchen Feldern muss ich das machen, aber in den meisten kommt kein <>&" vor.
Es sollte egal sein, ob etwas aktuell vorkommt oder nicht. Mach es einfach, das kostet so gut wie nichts und spart dir in der Zukunft eine Neubetrachtung, wenn sich irgendwas ändert. Oder bist du bei jeder Änderung nach geraumer Zeit so konzentriert und immer noch wissend, welche genauen Auswirkungen welches Drehen an einem bestimmten Rädchen hat?
Jaaa, ich stimme dir doch zu :) und NATÜRLICH verstehe ich meinen Code von vor 10 Jahren, du etwa nicht? ^^
Liebe Grüße