2010-12-27 15 views

risposta

194

Dipende da ciò che si sta realmente vogliono fare.

encodeURI presuppone che l'ingresso è un URI completo che potrebbe avere alcuni caratteri che devono codifica in esso.

encodeURIComponent codificherà tutto con un significato speciale, in modo da utilizzarlo per i componenti di URI, come

var world = "A string with symbols & characters that have special meaning?"; 
var uri = 'http://example.com/foo?hello=' + encodeURIComponent(world); 
66

Se stai codifica una stringa di mettere in un componente URL (un parametro querystring), si dovrebbe chiamare encodeURIComponent.

Se stai codifica un URL esistente, chiamare encodeURI.

+1

Se sto usando ajax come decodifico l'url che viene passato a php? –

+5

Non lo fai. Il server web lo fa automaticamente. – Quentin

+0

@Aditya: dipende da cosa stai facendo. – SLaks

29

http://xkr.us/articles/javascript/encode-compare/ ha una grande discussione, con esempi. Per citare il riassunto:

"Il metodo escape() non codifica il carattere + che viene interpretato come spazio sul lato server e generato da moduli con spazi nei rispettivi campi. che questa funzione non riesce a gestire correttamente i caratteri non-ASCII, si dovrebbe evitare l'uso di fuga(), quando possibile La migliore alternativa è di solito encodeURIComponent()

escape() non codificare:.. @ */+

L'uso del metodo encodeURI() è un po 'più specializzato di escape() in quanto codifica per URI rispetto a querystring, che fa parte di un URL. Utilizzare questo metodo quando è necessario codificare una stringa in b Viene utilizzato per qualsiasi risorsa che utilizza URI e richiede che alcuni caratteri rimangano non codificati. Si noti che questo metodo non codifica il carattere, poiché è un carattere valido all'interno degli URI.

encodeURI() non sarà codificare: ~ @ # $ & *() =: /,; +'

Infine, l'encodeURIComponent() metodo deve essere utilizzato nella maggior parte dei casi in cui la codifica di un singolo componente!? di un URI. Questo metodo codificherà determinati caratteri che sarebbero normalmente riconosciuti come caratteri speciali per gli URI in modo che molti componenti possano essere inclusi. Si noti che questo metodo non codifica il carattere, poiché è un carattere valido all'interno degli URI.

encodeURIComponent() non sarà codificare:! ~ *() '"

8

encodeURIComponent(): presuppone che il suo argomento è una porzione (come il protocollo, il nome host, il percorso, o stringa di query) di un . URI quindi sfugge i caratteri di punteggiatura che vengono utilizzati per separare il portionsof un URI

encodeURI():. è usato per la codifica URL esistente

0

Nel caso in cui si desidera codificare questi caratteri troppo: ! ' *) (, poi la soluzione è:

function fixedEncodeURIComponent(str) { 
    return encodeURIComponent(str).replace(/[!'()*]/g, function(c) { 
    return '%' + c.charCodeAt(0).toString(16); 
    }); 
} 

(source)

+5

Non dovresti sfuggire a quei personaggi in url. – Arashsoft

+0

Come dice la documentazione citata: "questi caratteri non hanno usi di delimitazione URI formalizzati" – caesarsol

+0

@caesarsol quindi, dovrei modificare la mia risposta. fammi sapere i tuoi pensieri perché non capisco cosa significhi la documentazione citata .. –

-2

Come regola generale uso encodeURIComponent. Non aver paura del nome lungo pensando che sia più specifico nel suo uso, per me è il metodo più comunemente usato.Inoltre, non essere risucchiato nell'uso di encodeURI perché lo hai testato e sembra che la codifica sia corretta, probabilmente non è quello che intendevi usare e anche se il tuo semplice test usando "Fred" in un campo di nome ha funzionato, troverai più tardi, quando usi un testo più avanzato come l'aggiunta di una e commerciale o di un hashtag, fallirà. Puoi guardare le altre risposte per i motivi per cui questo è.