Domanda

Qualcosa che non riesco ancora a capire quando l'esecuzione di una richiesta http get al server ciò che il vantaggio è in uso funzione JS encodeURIcomponent per la codifica di ogni componente del http-get.

Facendo alcune prove ho visto che l' server (tramite PHP) si ottengono i valori di richiesta http get correttamente anche se io non uso encodeURIcomponent! Ovviamente ho ancora bisogno di codificare a livello di client il carattere speciale & ?= / :in caso contrario, un http-get valore come questa "pace&amore=virtù" sarebbe considerata come una nuova coppia chiave-valore della richiesta http get invece di un singolo valore.Ma perché encodeURIcompenent codifica anche molti altri personaggi come 'è', per esempio, che si traduce in %C3%A8 che deve essere decodificato su un server PHP utilizzando il utf8_decode funzione.

Utilizzando encodeURIcomponent tutti i valori della richiesta http get sono utf8 codificato, quindi in caso di farli in PHP devo chiamare ogni volta il utf8_decode funzione su ogni $_GET valore abbastanza fastidioso.

Perché non possiamo semplicemente codificare la & ?= / :caratteri?

vedere anche: JS encodeURIComponent risultato diverso da quello creato dalla FORMA Essa mostra che encodeURIComponent non anche codificare correttamente a causa di un semplice browser MODULO di OTTENERE codifica caratteri come '€', in modo diverso.Quindi mi chiedo ancora che cosa fa questo encodeURIComponent è per?

È stato utile?

Soluzione

Questo è un problema di codifica dei caratteri (di nuovo).Come Gaby dichiarato, gli Uri sono una sequenza di caratteri ASCII (quindi solo byte di intervallo tra 0 e 127).Modo di qualsiasi altro personaggio, che non è in ASCII, deve essere codificato con il Per Cento Di Codifica.

E poiché la codifica UTF-8 è il nuovo “carattere universale di codifica”, oggi gli agenti utente di interpretare l'URI per essere codificati in UTF-8.Ma questi codifica UTF-8 parole sono anche gli stessi codificato con la Percentuale di Codifica in quanto Uri non può contenere altri caratteri (ad eccezione di quelli in ASCII.

Ciò significa che, quando si entra http://en.wikipedia.org/wiki/€ nel campo dell'indirizzo del browser, il browser cerca il codice UTF-8 per (0xE282AC) e si applica la Percentuale di Codifica su di esso (%E2%82%AC).Così http://en.wikipedia.org/wiki/€ sarà effettivamente causare http://en.wikipedia.org/wiki/%E2%82%AC.

Per dimostrare che questo è vero, basta inserire http://en.wikipedia.org/wiki/%E2%82%AC nel tuo campo per l'indirizzo e il vostro browser sarà probabilmente che in http://en.wikipedia.org/wiki/€.Che è perché al giorno d'oggi gli agenti utente di interpretare l'URI per essere codificati in UTF-8.

Ora tornare alla tua domanda iniziale, perché si dovrebbe applicare la Percentuale di Codifica in modo esplicito:Immagina di avere una pagina web in cui si desidera creare un link per l'articolo di Wikipedia sul simbolo dell'Euro.Se si scrivono solo le URI con un normale :

<a href="http://en.wikipedia.org/wiki/€">Euro sign</a>

Il browser utilizza la codifica dei caratteri del documento di carattere.Ciò significa che, se il documento di codifica Windows-1252 (come in la domanda), il sarà codificato come 0x80 e l'URI sarebbe http://en.wikipedia.org/wiki/%80 (questo in realtà funziona perché Wikipedia è che intelligente ad indovinare Windows-1252 è il personaggio più popolare di codifica con un carattere stampabile su 0x80).

Ma se il documento di codifica ISO 8859-15, il sarà codificato come 0xA4 che rappresenta il valuta sign ¤ ISO 8859-1 (Wikipedia avrà scelto ISO 8859-1, perché 0xA4 è valido sequenza di byte in UTF-8 e HTTP specifica ISO 8859-1 come carattere predefinito di codifica).

Quindi vi consiglio di utilizzare sempre la Percentuale di Codifica in modo da evitare errori.Non lasciare che l'utente agenti di indovinare che cosa vuoi dire.

Altri suggerimenti

Che è perché

Un Uniform Resource Identifier (URI) è definito in [RFC3986] come una sequenza di caratteri scelti da un numero limitato sottoinsieme del repertorio di US-ASCII [ASCII] i caratteri.

Quindi, ufficialmente unicode non è supportato; vedere la RFC per ulteriori dettagli.Tutti i browser moderni supportano, però, e che è il motivo per cui si ottengono i risultati bene..ma per la strana caso in cui alcuni browser o del sistema che non supporta la codifica di esso e assicurarsi che funziona bene in tutti standard compliant browser..

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top