2013-05-29 12 views
23

È consueto omettere ;charset="utf-8" quando il tipo di contenuto è application/x-www-form-urlencoded?application/x-www-form-urlencoded e charset = "utf-8"?

In particolare, quando si utilizza accept-charset="utf-8" in un tag form, mi aspetto che qualche indicazione indichi che utf-8 viene utilizzato nelle intestazioni, ma non lo vedo.

Ecco il mio semplice test in Chrome. La pagina del modulo è:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> 
</head> 
<body> 
<form method="POST" action="printenv.cgi" accept-charset="utf-8"> 
Your name: 
<input name="name" type="text" size="30"> 
</form> 
</body> 
</html> 

E le intestazioni per la richiesta generata sono:

POST /printenv.cgi HTTP/1.1 
Host: ...:8000 
Connection: keep-alive 
Content-Length: 19 
Cache-Control: max-age=0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Origin: http://...:8000 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36 
Content-Type: application/x-www-form-urlencoded 
Referer: http://...:8000/utf8-test.html 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8 

Qual è la convenzione per specificare come i valori dei parametri sono codificati sotto forma?

risposta

24

1) Non è stato definito alcun parametro set di caratteri per questo tipo di supporto.

2) Per le linee guida di codifica, vedere https://www.w3.org/TR/html5/sec-forms.html#application-x-www-form-urlencoded-encoding-algorithm.

+7

Oh, curiosità interessante che non sapevo: * "Se il nome della voce è" _charset_ "e il suo tipo è" nascosto ", sostituiscilo con charset."* – deceze

+0

Nota che stai eseguendo il collegamento alla specifica ** HTML 5 **, ma l'HTML in questione utilizza invece ** HTML 4 **. Ecco l'algoritmo di invio del modulo per HTML 4: http: //www.w3 .org/TR/1999/REC-html401-19991224/interact/forms.html # h-17.13, sebbene non parli della gestione dei charset –

+0

Remy: il doctype non influenza ciò che i browser fanno rispetto alla codifica dei moduli. –

4

Nota: che al passaggio 2 del collegamento precedente è indicato: "Altrimenti, lasciare che la codifica dei caratteri selezionata sia UTF-8." (vedi:. http://www.w3.org/TR/html5/forms.html#application/x-www-form-urlencoded-encoding-algorithm)

anche io, che questo sembra indicare che si tratta di una pratica migliore per gli agenti utente di utilizzare UTF-8?

http://www.w3.org/TR/html40/appendix/notes.html#non-ascii-chars

Qui è quello che dice: B.2.1 caratteri non-ASCII nei attributo URI valori

Anche se gli URI non contengono valori non ASCII (si veda [URI], sezione 2.1) autori a volte li specificano in valori di attributo che prevedono URI (cioè, definiti con% URI; nel DTD). Per esempio, il seguente valore href è illegale:

...

Si consiglia che i programmi utente adottare la seguente convenzione per la gestione di caratteri non-ASCII in questi casi:

Represent each character in UTF-8 (see [RFC2279]) as one or more bytes. 
Escape these bytes with the URI escaping mechanism (i.e., by converting each byte to %HH, where HH is the hexadecimal notation of the byte value). 

Questa procedura risultati in un URI sintatticamente legale (come definito in [RFC1738], sezione 2.2 o [RFC2141], sezione 2) che è indipendente dalla codifica dei caratteri a cui il documento HTML che trasportava l'URI può essere stato transcodificato.

Nota. Alcuni vecchi programmi utente elaborano banalmente gli URI in HTML usando i byte della codifica dei caratteri in cui è stato ricevuto il documento. Alcuni documenti HTML precedenti si basano su questa pratica e si interrompono quando vengono trascodificati. I programmi utente che desiderano gestire questi documenti più vecchi dovrebbero, quando ricevono un URI contenente caratteri al di fuori del set legale, utilizzare prima la conversione basata su UTF-8. Solo se l'URI risultante non si risolve dovrebbero provare a costruire un URI basato sui byte della codifica del carattere in cui è stato ricevuto il documento.

Nota. La stessa conversione basata su UTF-8 dovrebbe essere applicata ai valori dell'attributo name per l'elemento A.