2014-12-02 8 views
5

Ho un problema con encodeURIComponent() come sembra comportarsi in modo diverso rispetto ai browser (testato con Chrome e Firefox):encodeURIComponent() differenza con i browser e [Ø å] caratteri

  • encodeURIComponent('ä') rendimenti %C3%A4
  • escape('ä') rendimenti %E4
  • Chrome/Firefox codifica per ä in forme x-www-form-urlencoded come %E4

Quindi, perché encodeURIComponent si comportano in modo diverso rispetto a tutti gli altri (principalmente i browser)? Ciò causa problemi, in quanto alcuni siti Web non comprendono ciò che sto cercando di fornire loro. Il sito web in questione è http://verkkopalvelu.vrk.fi/Nimipalvelu/default.asp?L=1 (fai clic su "Etunimihaku" perché è basato su iframe).

È encodeURIComponent interrotto e come questa situazione deve essere corretta? Quale sarebbe il modo corretto di codificare caratteri come ä ö å? escape() sembra codificare come quei browser, ma escape() è deprecato.

Ho testato i browser con Fiddler e anche la scheda Console/Rete mostra la codifica come %E4 quando invio un modulo. Anche un link di prova qui: A http://jsfiddle.net/tcyfktvg/1/

+0

Accetterete la mia risposta o commento, se mancano le informazioni essenziali? –

risposta

3

encodeURIComponent() non è rotto. Codifica i caratteri utilizzando il set di caratteri UTF-8. Sempre. (ECMAScript 3rd Edition (ECMA-262) pagina 82)

escape() utilizza Unicode per la codifica (ECMAScript 1st Edition (ECMA-262) pagina 60). Se il codice Unicode è < 256, viene utilizzata la semplice rappresentazione a due lettere, come si vede per "ä". Se il codice Unicode è> = 256, viene utilizzata la rappresentazione a quattro caratteri estesa con una "u" iniziale. Esempio: escape("겧") == "%uACA7".

Il problema sorge quando un server http riceve un URL codificato. Deve decodificarlo. Ma l'URL stesso non dice quale codifica è stata utilizzata per crearlo.

Questo URL: http://server/%C3%A4 potrebbe essere un http://server/ä se è stato codificato da encodeURIComponent() (usando UTF-8), ma potrebbe anche essere un http://server/ä codificata da escape() (utilizzando Unicode):

encodeUriComponent("ä") == "%C3%A4" 
escape("ä") == "%C3%A4" 

Sta a la configurazione del server che codifica utilizzerà per decodificare l'URL. Quindi, ecco la soluzione al tuo problema: sapere quale URL codifica il server http si aspetta e scegliere il metodo di codifica appropriato.

+0

Nel caso venissi qui a causa di questo fastidioso problema di IIS (che una stringa codificata da javascript è decodificata erroneamente sul server) controlla qui per la soluzione https://github.com/owncloud/core/issues/6267#issuecomment-30159152 – makriria

Problemi correlati