--- title: encodeURIComponent() slug: Web/JavaScript/Reference/Global_Objects/encodeURIComponent translation_of: Web/JavaScript/Reference/Global_Objects/encodeURIComponent ---
La funzione encodeURIComponent() codifica un componente di un {{Glossary("URI")}} sostituendo alcuni specifici caratteri con una, due, tre o quattro sequenze di escape, che rappresentano il carattere codificato in {{Glossary("UTF-8")}} (le sequenze di quattro caratteri di escape verrano solo create per i caratteri composti da due caratteri "surrogati").
encodeURIComponent(uriComponent);
uriComponentencodeURIComponent sostituisce tutti i caratteri esclusi i seguenti: lettere, cifre, - _ . ! ~ * ' ( )
Se si tenta di codificare un surrogato che non è parte di una coppia, verrà generato un {{jsxref("Global_Objects/URIError", "URIError")}}.
// Coppia surrogata: Ok
encodeURIComponent("\uD800\uDFFF");
// Solo il primo carattere surrogato:
// Viene generato un "URIError: malformed URI sequence"
encodeURIComponent("\uD800");
// Solo il secondo carattere surrogato:
// Viene generato un "URIError: malformed URI sequence"
encodeURIComponent("\uDFFF");
Per evitare problemi inaspettati durante le richieste al server, bisognerebbe richiamare encodeURIComponent su ogni dato inserito dall'utente che verrà passato come parte di un {{Glossary("URI")}}. Per esempio, un un utente potrebbe digitare "Cani&Gatti = animali". Senza utilizzare la funzione encodeURIComponent, la richiesta verrebbe costruita in modo simile a "commento=Cani&Gatti%20=%20animali". Notare che sono due variabili separate: "commento" e "Gatti%20". Utilizzando quuesta funzione verrebbe invece costruita come "commento=Cani%26Gatti%20%3D%20animali".
Utilizzando application/x-www-form-urlencoded, gli spazi devono essere sostituiti da un "+"., quindi si potrebbe usare la funzione encodeURIComponent seguita da un altra sostituzione da "%20" a "+".
Per aderire con più precisione allo standard RFC 3986 (secondo il quale !, ', (, ) e * sono caratteri riservati), si può usare la seguente funzione:
function fixedEncodeURIComponent(str) {
return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {
return '%' + c.charCodeAt(0).toString(16);
});
}
Il seguente esempio fornisce un metodo per codificare come richiesto dall'header Content-Disposition:
var fileName = 'my file(2).txt';
var header = "Content-Disposition: attachment; filename*=UTF-8''"
+ encodeRFC5987ValueChars(fileName);
console.log(header);
// logs "Content-Disposition: attachment; filename*=UTF-8''my%20file%282%29.txt"
function encodeRFC5987ValueChars (str) {
return encodeURIComponent(str).
// Notare che anche se per l'RFC3986 "!" è riservato, non lo è per
// l' RFC5987, quindi non viene sostituito
replace(/['()]/g, escape). // i.e., %27 %28 %29
replace(/\*/g, '%2A').
// Per l'RFC5987 questi caratteri non necessitano di essere codificati,
// quindi possiamo consentire un po' più di leggibilità: |`^
replace(/%(?:7C|60|5E)/g, unescape);
}
| Specifica | Stato | Commenti |
|---|---|---|
| ECMAScript 3rd Edition. | Standard | Definizione iniziale. |
| {{SpecName('ES5.1', '#sec-15.1.3.4', 'encodeURIComponent')}} | {{Spec2('ES5.1')}} | |
| {{SpecName('ES6', '#sec-encodeuricomponent-uricomponent', 'encodeURIComponent')}} | {{Spec2('ES6')}} |
{{CompatibilityTable}}
| Funzionalità | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Supporto di base | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |
| Funzionalità | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Supporto di base | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |