2013-10-30 7 views
8

Non riesco a capire come impostare il set di caratteri quando il tipo di contenuto non è text/html, text/plain, o text/xml, ma è invece il tipo di contenuto application/x-www-form-urlencoded.ajax, setRequestHeader(), Content-Type, application/x-www-form-urlencoded e charset

Dato questo (semplificato) codice javascript:

var xhr = new XMLHttpRequest(); 

Se Non impostare in modo esplicito la codifica,

xhr.open('POST', 'serv.php', true); 
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 

Firebug mi dice che il tipo di contenuto è "application/x -www-form-urlencoded; charset = UTF-8. "

Se ho impostato il set di caratteri ISO-8859-1 per esempio,

xhr.open('POST', 'serv.php', true); 
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=ISO-8859-1'); 

Firebug ancora mi dice "application/x-www-form-urlencoded; charset = UTF-8 . "

Se provo qualcosa di simile

xhr.setRequestHeader('Content-Type', 'text/plain; charset=ISO-8859-1'); 

allora rispetta il set di caratteri.

In tutti i casi il metodo() send va come questa:

xhr.send('id=9&name=Yoda'); 

Perché non onorare il set di caratteri a specificare se il Content-Type è x-www-form-urlencoded?

NOTA: sto usando ISO-8859-1 solo come esempio. Il mio obiettivo è capire cosa sta succedendo.

risposta

11

Il tipo mime application/x-www-form-urlencoded non supporta i parametri (ad esempio charset). Se guardi allo this section delle specifiche HTML5, vedrai come viene determinato il set di caratteri (è complicato). In particolare, c'è una nota in fondo alla sezione che menziona come charset non può essere specificato come parametro per il tipo mime.