2010-01-06 11 views
6

Oggi, ho guardato in codice HTML di facebook.com, e ha trovato qualcosa di simile:Meccanismo di rilevamento charset di Facebook?

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

E 'ripetuta due volte all'interno del <form>...</form>.

Qualche idea su cosa potrebbe essere utile questo codice: una sorta di rilevamento del set di caratteri del client sul lato server? Per quanto ne so, il set di caratteri del browser viene trasmesso comunque in richiesta HTTP (un'intestazione "Accept-Charset").

risposta

4

Qualsiasi idea di quello che potrebbe essere utile per questo codice - una sorta di rilevamento client charset server-side?

Apparentemente così.

Il simbolo dell'Euro è utile per la rilevazione charset, perché ci sono tanti modi di codifica è:

  • E2 82 AC in UTF-8
  • 88 in Windows-1251
  • 80 nell'altra codifiche finestre-125X
  • A4 in ISO-8859-7, -15 e -16
  • A2 E3 in GB18030
  • 85 40 in shift-JIS
  • 0.123.516,41 mila
  • ecc

Per quanto ne so, charset del browser viene trasmesso in ogni caso richiesta HTTP (un header "Accept-Charset").

E 'suppone alla trasmesso nella HTTP Content-Type intestazione, ma questo non significa che i programmi utente in realtà lo fanno bene.

3

Immagino che stiano facendo questo nello script ricevente per assicurarsi che il client abbia inviato la richiesta correttamente codificata come UTF-8 e forse anche, perché sanno quali caratteri aspettarsi, per rilevare la codifica effettiva al volo.

Se ricordo bene, ho dovuto occuparmene una volta - ci sono stati problemi con la codifica dei moduli in IE6 in alcune situazioni.

+0

Grazie, ho intenzione di google su questo problema relativo al modulo relativo a IE6. – Void

+0

Potrei sbagliarmi, ma penso * che fosse qualcosa sulle codifiche ambigue (ad esempio quando l'intestazione 'content-type' dice qualcosa di diverso dal tag META 'content-type'). Ad ogni modo, penso che Facebook stia facendo questo perché sono accessibili a tutti i tipi di client e hanno bisogno di assicurarsi che la loro codifica sia generalmente corretta. –

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

Credo che un po 'del browser invia &euro; stessa e &acute; stessa ´,

modo da poter controllare come charset_test [0] == charset_test [2] e charset_test [1] == charset_test [ 3]

Per altri caratteri, non ne ho idea.水 probabilmente test per CJK.

0

Come dice Pekka, questo deve essere in grado di rilevare il set di caratteri della richiesta. Il protocollo HTTP non fornisce un modo per specificare il set di caratteri di una richiesta. Per questo motivo, è necessario fare affidamento su convenzioni al di fuori del protocollo. Generalmente i browser sono prevedibili, ma questo trucco è l'unico modo per essere sicuri al 100%.

Consulta anche: http://www.phpwact.org/php/i18n/charsets

Problemi correlati