Der Martin: Immer wieder Zeichensätze

Beitrag lesen

Hallo,

  1. Ich kann eine Angabe im Metatag machen
  2. Ich kann einen Defaultwert über eine .htaccess festlegen.
  3. Ich kann über phpmyadmin ein Encoding für die DB festlegen.
  4. Ich kann über php:header() ein Encoding festlegen.
  5. Ich kann neuerdings für eine Datei beim Abspeichern das Encoding festlegen.

was heißt "neuerdings"? Das war schon immer so, auch wenn es dir vielleicht nicht bewusst war.

Wie die Angaben von 1-5 miteinander konkurrieren und was sich wie überschreibt ist mir allerdings nicht klar.

Die sind auch teils unabhängig voneinander - andersrum: Sie konkurrieren nur teilweise miteinander.

Eine XHTML-Site besteht aus:

  • dem XML-File 'index.php'

Die PHP-Datei muss zunächst in der richtigen Codierung gespeichert werden. Beim Ausliefern an den Client sollte[1] der Server im HTTP-Header "Content-Type" wieder die richtige Codierung angeben. Das kann man über die Serverkonfiguration erreichen (z.B. AddDefaultCharset in der .htaccess), man kann aber unabhängig davon auch den Content-Type-Header mit der PHP-Funktion header() selbst ausgeben (muss man sogar, wenn man mit PHP etwas anderes als text/html ausgeben möchte); das überschreibt dann den in der Serverkonfiguration festgelegten Wert.

[1] Gibt der Server im Content-Type-Header *keine* Codierung an, dann (und nur dann) kommt ersatzweise die Angabe aus dem meta-Element im HTML-Dokument zum Tragen.

  • einem Stylesheet 'styles.css'

Üblicherweise enthält ein Stylesheet nur ASCII-Zeichen (es sei denn, man verwendet Zeichen außerhalb dieses Bereichs als Bezeichner für Klassen oder IDs), so dass die Codierung in diesem Fall meist kein Thema ist.

  • einer JS-Datei 'functions.js'

Bei ausgelagerten Javascripts kommt es eigentlich nur innerhalb von Stringkonstanten ("Literalen") darauf an, dass das Dokument in der richtigen Codierung gespeichert ist. Welche Codierung bei der Auslieferung der Ressource angegeben wird, ist eher nebensächlich.

  • einer Grafik 'image.jpg'

Eine Grafik hat keine Textinhalte, demzufolge auch keine Textcodierung. Wichtig ist hier nur, dass der richtige Content-Type "image/jpeg" angegeben wird - das macht der Server aber aufgrund seiner Konfiguration meistens automatisch richtig. Nur wenn man Grafikressourcen dynamisch erzeugt, etwa mit PHP, muss man sich selbst um den richtigen Content-Type kümmern.

Weiterhin wird in die 'index.php' per php:include() die Datei 'include.inc.php' inkludiert.

Das spielt keine Rolle - vorausgesetzt, die includierten Dateien sind ihrerseits in der richtigen Codierung gespeichert. Eingebunden werden sie ja nicht über HTTP, sonders über das Filesystem, und hier gibt es sowas wie MIME-Typen oder Codierungsangaben nicht.

Dort wird:

  • eine DB-Connection aufgebaut.

Und bei der Kommunikation zwischen Anwendung (PHP-Script) und der Datenbank muss auch die Codierung richtig vereinbart werden. Es ist fatal, wenn die Datenbank "weiß", dass die Feldinhalte in UTF-8 codiert sind, sie aber zur Übergabe an die Anwendung verlustbehaftet in ISO-8859-x umcodiert, und die Anwendung "glaubt" weiterhin, UTF-8 zu bekommen.

  • und ein SQL-Statement abgesetzt.
  • das Result wird in Variablen geschrieben, die auf der index.php ausgegeben werden.

Wenn bis hierher alles stimmt, bergen diese beiden Schritte kein Risiko mehr.

So long,
 Martin

--
Das Leben ist lebensgefährlich und endet meistens tödlich.