Il trucco di jQuery non codifica le virgolette e in IE spoglia il tuo spazio bianco.
Basandomi sulla escape templatetag di Django, che immagino sia già ampiamente utilizzata / testata, ho realizzato questa funzione che fa ciò che è necessario.
È probabilmente più semplice (e forse più veloce) di qualsiasi soluzione alternativa per il problema di stripping degli spazi bianchi e codifica le virgolette, che è essenziale se, ad esempio, utilizzerai il risultato all'interno di un valore di attributo.
function htmlEscape(str) {
return str
.replace(/&/g, '&')
.replace(/"/g, '"')
.replace(/'/g, ''')
.replace(/</g, '<')
.replace(/>/g, '>');
}
// I needed the opposite function today, so adding here too:
function htmlUnescape(str){
return str
.replace(/"/g, '"')
.replace(/'/g, "'")
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/&/g, '&');
}
Aggiornamento 17/06/2013:
nella ricerca dell'evasione più rapida ho trovato l'implementazione di un replaceAll
metodo:
http://dumpsite.com/forum/index.php?topic=4.msg29#msg29
(indicato anche qui: Il più veloce metodo per sostituire tutte le istanze di un carattere in una stringa )
Alcuni risultati delle prestazioni qui:
http://jsperf.com/htmlencoderegex/25
Fornisce una stringa di risultati identica alle replace
catene incorporate sopra. Sarei molto felice se qualcuno potesse spiegare perché è più veloce !?
Aggiornamento 2015-03-04:
Ho appena notato che AngularJS sta usando esattamente il metodo sopra:
https://github.com/angular/angular.js/blob/v1.3.14/src/ngSanitize/sanitize.js#L435
Aggiungono un paio di perfezionamenti: sembrano gestire un oscuro problema Unicode e convertire tutti i caratteri non alfanumerici in entità. Ho avuto l'impressione che quest'ultimo non fosse necessario finché hai specificato un set di caratteri UTF8 per il tuo documento.
Noterò che (4 anni dopo) Django non fa ancora nessuna di queste cose, quindi non sono sicuro di quanto siano importanti:
https://github.com/django/django/blob/1.8b1/django/utils /html.py#L44
Aggiornamento 06-04-2016:
potresti anche voler sfuggire alla barra /
. Ciò non è necessario per una corretta codifica HTML, tuttavia è raccomandato da OWASP come misura di sicurezza anti-XSS. (grazie a @JNF per aver suggerito questo nei commenti)
.replace(/\//g, '/');