dedlfix: und (Software) Zeichenkodierung mit Zend Studio und Apache

Beitrag lesen

echo $begrüßung;

  1. Die Quelldateien der Webseiten müssen bereits in einem Editor geschrieben sein der in UTF-8 kodiert.

Besser ist das. Nötig ist es aber nur, wenn im Quelltext Zeichen vorkommen, die jenseits von ASCII liegen.

  1. In diesen Dateien muss als Content-Typ UTF-8 angegeben werden.

Wichtiger als die charset-Angabe im Meta-Element Content-Type ist die Angabe des gleichnamigen HTTP-Headers, den der hat Vorrang wenn beide vorhanden sind. Oder anders gesagt: Das Meta-Element ist nur ein Ersatz für eine fehlende HTTP-Header-Angabe.

  1. In diesen Dateien muss bei Benutzereingaben sichergestellt werden, dass sie als UTF-8 übernommen werden.
  2. Die benutzte Server-Skriptsprache (in meinem Fall PHP) muss als CharSet UTF-8 benutzen.

PHP bietet momentan nur rudimentäre/kaum Unterstützung beim Thema Zeichensatz/-kodierung. Erst PHP 6 wird vollständig mit Multibyte-Zeichenkodierungen umgehen können. Solange liefert strlen() beispielsweise bei einem UTF-8-kodierten Täst eine Länge von 5.
Es gibt zwar die Multibyte String Functions-Extension, doch die ist nicht bei jedem Hoster freigegeben (und wohl auch nicht besonders schnell). Zur bisherigen UTF-8-Unterstützung gibt es eine Übersicht: http://wiki.silverorange.com/UTF-8_Notes

  1. Die benutzte Datenbank (in meinem Fall MySQL) muss als Zeichensatz Unicode (UTF-8) und als Kollationen UTF-8 verwenden.

Es gibt viele verschiedene Stellen, an denen in MySQL eine Angabe zum Zeichensatz/-kodierung wirkt. Das MySQL-Handbuch spendiert diesem Thema ein eigenes Haupt-Kapitel. Wichtig für die Kommunikation mit Clients (z.B. PHP) sind die "Connection Character Set"-Einstellungen. (Zusammenfassung: SET NAMES utf8)

  1. Der Webserver (in meinem Fall Apache) muss als HTTP-Header UTF-8 senden.
    Zu 6.: Wenn ich z.B. mit dem Web-Sniffer meine HTTP Header ausgeben lasse, dann habe ich als Transfer-Encoding die Angabe "chunked". Das damit eine Auslieferung in Teilen gemeint ist, ist klar.

Diese Transfer-Encoding-Angabe ist in dem Zusammenhang unwichtig. Am Content-Type-Header hängt eine charset-Angabe dran, oder auch nicht. Ändern kannst du das durch eine Konfiguration des Apachen. Schau dir die Direktiven an, die was mit "Charset" im Namen haben. Oder du kannst mit PHP selbst einen passenden Content-Type-Header inklusive charset-Angabe senden. (header())

Wie kann ich aber an die Infomation kommen mit welcher Zeichenkodierung im HTTP Header mein gemieteter Webspace die Seiten ausliefert?

Neben dem Websniffer gibt es Erweiterungen für die Browser, z.B. die livehttpheaders-Extension für den Firefox.

Zu 1.: Ich editiere mit Zend Studio 5 Enterprise Edition (Build 183). Weder in der Software, noch auf der Zend Homepage oder in Google habe ich ein Wort über die Zeichenkodierung gefunden.

Im Zend Studio 5.2.0 Professional Edition Build 233 lässt sich das Encoding einstellen.

Wie kann ich sicherstellen, dass ich in UTF-8 programmiere?

Wenn die 183er Ausgabe das nicht kann ... Pech gehabt. Updaten, anderen Editor verwenden, hinterher iconv oder recode auf die Dateien anwenden, ...

echo "$verabschiedung $name";