L'astuce jQuery ne code pas les guillemets et dans IE, elle supprimera votre espace.
Sur la base du templatetag d' échappement dans Django, qui je suppose est déjà largement utilisé / testé, j'ai créé cette fonction qui fait ce qui est nécessaire.
Il est sans doute plus simple (et peut-être plus rapide) que toutes les solutions de contournement pour le problème de suppression des espaces - et il code les guillemets, ce qui est essentiel si vous allez utiliser le résultat dans une valeur d'attribut par exemple.
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, '&');
}
Mise à jour 2013-06-17:
Dans la recherche de l'échappement le plus rapide, j'ai trouvé cette implémentation d'une replaceAll
méthode:
http://dumpsite.com/forum/index.php?topic=4.msg29#msg29
(également référencé ici: Fastest méthode pour remplacer toutes les instances d'un caractère dans une chaîne )
Quelques résultats de performances ici:
http://jsperf.com/htmlencoderegex/25
Il donne une chaîne de résultat identique aux replace
chaînes intégrées ci-dessus. Je serais très heureux si quelqu'un pouvait expliquer pourquoi c'est plus rapide!?
Mise à jour 2015-03-04:
Je viens de remarquer que AngularJS utilise exactement la méthode ci-dessus:
https://github.com/angular/angular.js/blob/v1.3.14/src/ngSanitize/sanitize.js#L435
Ils ajoutent quelques améliorations - ils semblent gérer un problème Unicode obscur ainsi que convertir tous les caractères non alphanumériques en entités. J'avais l'impression que ce dernier n'était pas nécessaire tant que vous disposez d'un jeu de caractères UTF8 spécifié pour votre document.
Je noterai que (4 ans plus tard) Django ne fait toujours aucune de ces choses, donc je ne sais pas à quel point elles sont importantes:
https://github.com/django/django/blob/1.8b1/django/utils /html.py#L44
Mise à jour 2016-04-06:
Vous pouvez également souhaiter échapper à la barre oblique /
. Ceci n'est pas requis pour un encodage HTML correct, mais il est recommandé par OWASP comme mesure de sécurité anti-XSS. (merci à @JNF de l'avoir suggéré dans les commentaires)
.replace(/\//g, '/');