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

Beitrag lesen

echo $begrüßung;

Was passiert denn wenn ich in meiner UTF-8 Kette bei PHP ISO-8859-1 nutze? Was genau geht da schief? Ich muss dazu sagen, dass ich bisher eine Mischung aus beiden habe und bisher habe ich noch keinen Nachteil bemerkt. Weder lokal noch online.

Die Stringverarbeitung geht bisher davon aus, dass ein Zeichen aus einem Byte besteht. Ein in UTF-8 kodiertes ä besteht aber aus zwei Bytes. strlen() liefert 2 statt 1. Wenn du von "Täst" den Teilstring drei Zeichen von hinten haben möchtest (äst), dann schneidet substr('Täst', -3) das ä in zwei Teile. Usw. usf. Das einfache Durchreichen von der Datenbank zum HTML-Code bereitet aber keine Probleme.

Ich muss aber sicherstellen, dass Clients die kein ISO-8859-1 erwarten sondern u.a. UTF-8 keinen Buchstabensalat am Bildschirm haben.

Wichtig ist, dass das von dir Ausgelieferte mit der von dir angegebenen Kodierungsangabe übereinstimmt. Der Browser muss natürlich diese Kodierung verstehen, doch das ist heutzutage bei UTF-8 mit den gängigen aktuellen Browser-Versionen kein Problem. Ein Problem, das du nicht beinflussen kannst, sind nicht vorhandene Glyphen in den Fonts des Clients zum Darstellen der Zeichen.

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

Das ist ja sensationell! Diese 87 kB bereiten mir mehr Freude als so manche Megabyte grossen Anwendungen. Allerdings habe ich jetzt gleich zuviel Informationen, allen Ernstes:

GET / HTTP/1.1
Host: domain.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1) Gecko/20061010 Firefox/2.0
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

HTTP/1.x 200 OK
Date: Fri, 22 Dec 2006 10:04:18 GMT
Server: Apache/1.3.36 (Unix) mod_auth_passthrough/1.8 mod_log_bytes/1.2 mod_bwlimited/1.4 PHP/4.4.2 FrontPage/5.0.2.2635.SR1.2 mod_ssl/2.8.27 OpenSSL/0.9.7a mod_mono/1.0.2
X-Powered-By: PHP/4.4.2
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html

Der obere Teil ist der Request, also das was der Browser zum Server sendet, um eine Ressource anzufordern. Der untere Teil sind die Kopfzeilen der Antwort, Response genannt.

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 -> Heisst das, dass das Dokument mit zwei Kodierungen gesendet wird, oder wie?

Das ist ein Wunsch des Clients, der besagt, mit welcher Wertigkeit welche Kodierung (der Antwort) bevorzugt wird. Praktisch kann man den im Fall von ISO 8859-1 und UTF-8 einfach ignorieren, da die Browser beides beherrschen. Meist hat sich auch der Anwender keinen Kopf bei der Einstellung seiner Browserkonfiguration gemacht, womit dieser Wunsch ebenfalls wertlos wird.

P.S. Bitte die Zitat-Zeichen nicht verändern, sonst wird es unübersichtlich.

echo "$verabschiedung $name";