Hallo Alex,
dachte eigentlich vielmehr an solche Kürzel wie &%20; oder &#x...; etc. Gibt es da nicht was eigenes nur für MBCS?
Was verstehst du unter "was eigenes für MBCS" bzw. wo hast du Probleme?
Die Form &%20 ist mir nicht bekannt. Wahrscheinlich meinst du die Kodierung innerhalb von URLs (und dem Request-Body von HTTP-POST-Request, falls dieser als application/x-www-form-urlencoded formatiert): Diese bestehen aus dem Prozentzeichen gefolgt von dem Wert des Byte-Wert des Zeichens in der vom Client verwendeten Kodierung in hexadezimaler Schreibweise. D.h. ö wird beispielsweise unter ISO-8859-1 zu %F6.
Wird ein Multibyte-Zeichensatz verwendet, so werden Multibyte-Zeichen mit mehreren Escape-Sequenzen, für jedes Byte des Zeichens eine, maskiert: ö wird bei der Verwendung von UTF-8 beispielsweise zu %C3%B6.
Wird die Antwort hingegen als multipart/form-data gesendet, so ist es nicht nötig, nicht alpha-numerische Zeichen derartig zu maskieren.
Da der Browser diese Maskierung automatisch erledigt, und ein vernünftiges Interface zur serverseitigen Verarbeitung von Formulardaten diese in der demaskierten Form zu Verfügung stellt, wenn alles so funktioniert, wie es sollte, solltest du davon normalerweise also gar nichts mitkriegen.
Ein Problem gibt es aber, wenn der Besucher Zeichen eingegeben hat, die im verwendeten Zeichensatz nicht vorhanden sind. Viele Browser kodieren diese Angaben dann als SGML-Zeichenreferenzen, wobei dies dann aber auch vom verarbeitenden Programm auf dem Server erkannt werden muss. Dabei ist es egal, welcher Zeichensatz verwendet wird, da bei numerischen SGML-Zeicheneferenzen immer die Position im Universal Character Set (Unicode) angegeben wird.
Wird beispielsweise der Zeichensatz ISO-8859-1 verwendet und der Besucher hat bei der Frage nach seinem Namen aber Πυθαγόρας eingegeben, so sendet der Browser dann die Zeichenfolge Πυθαγόρας an den Server.
Kennt der Server aber auch nur ISO-8859-1 und will die Daten wieder ausgeben, passiert's: Der Server maskiert die Daten vor der Ausgabe (& wird durch & ersetzt, < durch < ...). D.h. der Server wandelt die Zeichenfolge Πυθαγόρας in &#928;&#965;&#952;&#945;&#947;&#972;&#961;&#945;&#962; um.
Dadurch bekommt der Besucher nun nicht das, was er eingegeben hat, nämlich Πυθαγόρας, zu sehen, sondern Πυθαγόρας
Damit das nicht passiert, muss der Server bzw. das Programm, das die Formulardaten verarbeitet SGML-Zeichenreferenzen erkennen und darauf acht geben, dass das Ampersand & in solchen Kombinationen nicht als & maskiert wird.
Diese Probleme lassen sich aber sehr leicht dadurch umgehen, dass alle Seiten (bzw. vor allem die Seite, die das Formular enthält) als UTF-8 ausgeliefert werden. Soweit mir bekannt, senden eigentlich alle Browser dann auch die Antwort als UTF-8, womit die Notwendigkeit zur Maskierung von nicht im Zeichensatz enthaltenen Zeichen wegfällt, da alle Zeichen, die in HTML darstellbar sind, auch in UTF-8 darstellbar sind.
Schöne Grüße,
Johannes