2010-01-06 7 views
6

Heute habe ich in HTML-Code von facebook.com sah, und so etwas wie dieses gefunden:Facebook-Zeichensatz-Erkennungsmechanismus?

<input type="hidden" value="€,´,€,´,水,Д,Є" name="charset_test"/> 

Es zweimal in der <form>...</form> wiederholt wird.

Eine Idee, wofür dieser Code nützlich sein könnte - eine Art von Server-seitiger Client-Zeichensatzerkennung? Soweit ich weiß, wird der Browser-Zeichensatz trotzdem in einer HTTP-Anfrage übertragen (ein "Accept-Charset" -Header).

Antwort

4

Jede Idee, was dieser Code kann für nützlich sein - eine Art von serverseitigen Client-charset Erkennung?

Anscheinend so.

Das Euro-Zeichen ist für charset Erkennung nützlich, weil es so viele Möglichkeiten der Codierung es ist:

  • E2 82 AC in UTF-8
  • 88 in Windows-1251
  • 80 in den anderen windows-125x Kodierungen
  • A4 in ISO-8859-7, -15 und -16
  • A2 E3 in GB18030
  • 85 40 in Shift-JIS
  • usw.

Soweit ich weiß, ist Browser charset in HTTP-Anforderung ohnehin übertragen werden (ein "Accept-Charset" header).

Es soll im HTTP-Header Content-Type übertragen, aber das bedeutet nicht, dass Benutzeragenten es tatsächlich richtig.

3

Ich denke, sie stimmen dies im empfangenden Skript überein, um sicherzustellen, dass der Client die Anforderung richtig codiert als UTF-8 und vielleicht sogar sendet, weil sie wissen, welche Zeichen zu erwarten sind, um die tatsächliche Codierung im laufenden Betrieb zu erkennen.

Wenn ich mich richtig erinnere - ich musste mich einmal damit befassen - gab es in einigen Situationen Probleme mit der Formcodierung in IE6.

+0

Vielen Dank, ich google über dieses IE6-Formular Problem. – Void

+0

Ich mag mich irren, aber ich * denke * es war etwas über ambigous Kodierungen (d. H. Wenn die 'content-type'-Kopfzeile etwas anderes als das' content-type' META-Tag sagt). Jedenfalls glaube ich, dass Facebook dies tut, weil sie von allen Arten von Kunden aufgerufen werden, und sie müssen sicherstellen, dass ihre Codierung im Allgemeinen richtig ist. –

0
&euro;,&acute;,€,´,水,Д,Є 

Ich denke, einige Browser &euro; gleiche wie und &acute; gleiche wie ´ senden,

So können sie wie charset_test überprüfen [0] == charset_test [2] und charset_test [1] == charset_test [ 3]

Für andere Charaktere habe ich keine Ahnung.水 wahrscheinlich für CJK testen.

0

Wie Pekka sagt, ist dies in der Lage, den Anfragezeichensatz zu erkennen. Das HTTP-Protokoll bietet keine Möglichkeit, den Zeichensatz einer Anfrage anzugeben. Aus diesem Grund muss man sich auf Konventionen außerhalb des Protokolls verlassen. Im Allgemeinen sind Browser vorhersehbar, aber dieser Trick ist der einzige Weg, um 100% sicher zu sein.

Siehe auch: http://www.phpwact.org/php/i18n/charsets