Quale di questi due metodi deve essere utilizzato per la codifica degli URL?Devo usare encodeURI o encodeURIComponent per gli URL di codifica?
risposta
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);
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
.
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:! ~ *() '"
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
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)
Non dovresti sfuggire a quei personaggi in url. – Arashsoft
Come dice la documentazione citata: "questi caratteri non hanno usi di delimitazione URI formalizzati" – caesarsol
@caesarsol quindi, dovrei modificare la mia risposta. fammi sapere i tuoi pensieri perché non capisco cosa significhi la documentazione citata .. –
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 è.
- 1. angolare delle risorse codifica URL
- 2. La codifica URL vede "&" (e commerciale) come "&" entità HTML
- 3. encodeURI() in PHP?
- 4. dovrebbe mai essere usato encodeURI?
- 5. Devo usare System.out.println() o qualcos'altro?
- 6. Devo usare em o px?
- 7. Devo usare rand() o rand_s()?
- 8. Devo usare nav o ul
- 9. Devo usare Pickle o cPickle?
- 10. Devo usare typeclass o no?
- 11. Devo usare gli escape php per le virgolette singole o usare le doppie virgolette negli array?
- 12. Devo usare MapView o MapFragment
- 13. Devo usare Angular.copy() o _.clone()?
- 14. Devo usare alias o alias_method?
- 15. Devo usare @EJB o @Inject
- 16. Devo usare Point.x o Point.getX()?
- 17. Devo usare Meteor.startup() o $ (function() {})
- 18. Funzione encode di codifica JavaScript in Postgresql?
- 19. Devo usare immagini spaziali durante la codifica di email HTML?
- 20. Devo usare la codifica Base64 o il byte [] per restituire dati binari nel servizio web .NET
- 21. Devo usare la dichiarazione di codifica in Python3?
- 22. Come codificare i periodi per gli URL in Javascript?
- 23. Devo usare Xamarin o QT per lo sviluppo mobile?
- 24. Devo usare JSON o AJAX per i dati di risposta?
- 25. modo consigliato per codificare/decodificare gli URL
- 26. Devo usare LingPipe o NLTK per estrarre nomi e luoghi?
- 27. Devo usare process.nextTick o setImmediate per l'iterazione asincrona?
- 28. Devo usare Drupal 6 o Drupal 7?
- 29. Numpy: Devo usare newaxis o None?
- 30. Devo usare un LINQ DataContext o molti?
Vedere anche http://stackoverflow.com/a/3608791/632951 – Pacerier
Una delle principali differenze è che 'encodeURI' non codificherà'/'così:' encodeURIComponent ("ac/dc") '=>' ac % 2Fdc' e 'encodeURI (" ac/dc ")' => 'ac/dc' – JoeRocc