hotti: Charset UTF-8 Problem

Beitrag lesen

hi mein Guter,

Du übergehst,

Nein, ich erkläre und gebe mir Mühe, das verständlich rüberzubringen. Wahrscheinlich überladen die PHP Entwickler ihre Funktionen dermaßen mit Pragmas, dass am Ende gar keiner mehr durchblickt.

Also, was heißt Transparenz:

=cut

Transparent Mode und Ajax-Response
Wie bereits dargelegt, ist ein Header Content-Type: text/plain; charset=UTF-8 für den Browser verbindlich, also kein Pragma. Im Fall einer Ajax-Response jedoch, kann die charset-Angabe im Header durchaus als Pragma (unverbindlich) betrachtet werden, wenn eine transparente Übertragung sicherstellt, dass die Codierung der Zeichen nicht verändert wird. Betrachte untenstehendes Beispiel zur Übertragung des Zeichens 'ä' welches utf8-codiert sei:

Fall 1: Das Zeichen wird als 'ä' übertragen, hier muss die Codierung im Ajax-Response-Header mitgegeben werden. Ein Header Content-Type: text/plain; charset=UTF-8 ist somit verbindlich.

Fall 2: Das Zeichen 'ä' wird serverseitig als %C3%A4 encodet in die Ajax-Response gegeben. In diesem Fall ist die charset-Angabe im HTTP-Header der Ajax-Response unverbindlich, also nur noch ein Pragma.

Erläuterung: Das Encoding im Fall 2 heißt URI-Escape, damit wird die Übertragung in den transparent mode geschaltet. Die Charset-Angabe im HTTP-Header kann in diesem Fall entfallen oder anders lauten. Transparent mode heißt technisch gesehen: Die Übertragung findet in einer 8-Bit-Umgebung statt, alle zu übertragenden Zeichen sind so encodet, dass im gesamten Content nur noch Zeichen sind, die 7 Bit benötigen (US-ASCII). Feilich muss in einem solchen Fall das URI-Escape im DOM wieder rückgängig gemacht werden, dazu gibt es die Funktionen decodeURI() und decodeURIComponent().

URI-Escape ist keineswegs nur eine Spielerei. Für die Übertragung multipler Contents nach dem MIME-Standard in einer Ajax-Response ist der transparent mode, sichergestellt mit URI-Escape, von größter Bedeutung.

=cut

Ab sofort auf der verlinkten Seite nachzulesen, Du bist schuld ;-)

Hotti