J'ai écrit une toute petite fonction qui fait ça. Il échappe seulement "
, &
, <
et >
(mais généralement ce dont vous avez besoin est de toute façon tout). Il est légèrement plus élégant que les solutions proposées précédemment en ce qu'il n'en utilise qu'une .replace()
pour effectuer toute la conversion. ( EDIT 2: complexité du code réduite rendant la fonction encore plus petite et plus nette, si vous êtes curieux du code d'origine, voir la fin de cette réponse.)
function escapeHtml(text) {
'use strict';
return text.replace(/[\"&<>]/g, function (a) {
return { '"': '"', '&': '&', '<': '<', '>': '>' }[a];
});
}
C'est du Javascript simple, pas de jQuery utilisé.
Échapper /
et '
aussi
Modifier en réponse au commentaire de mklement .
La fonction ci-dessus peut facilement être étendue pour inclure n'importe quel caractère. Pour spécifier plus de caractères à échapper, insérez-les simplement dans la classe de caractères de l'expression régulière (c'est-à-dire à l'intérieur de /[...]/g
) et en tant qu'entrée dans l' chr
objet. ( EDIT 2: raccourci également cette fonction, de la même manière.)
function escapeHtml(text) {
'use strict';
return text.replace(/[\"&'\/<>]/g, function (a) {
return {
'"': '"', '&': '&', "'": ''',
'/': '/', '<': '<', '>': '>'
}[a];
});
}
Notez l'utilisation ci-dessus '
pour l'apostrophe (l'entité symbolique '
peut avoir été utilisée à la place - elle est définie en XML, mais n'était pas à l'origine incluse dans la spécification HTML et pourrait donc ne pas être prise en charge par tous les navigateurs. Voir: Article Wikipedia sur les encodages de caractères HTML ). Je me souviens également d'avoir lu quelque part que l'utilisation d'entités décimales est plus largement prise en charge que l'utilisation d'hexadécimal, mais je n'arrive pas à trouver la source de cela maintenant. (Et il ne peut pas y avoir beaucoup de navigateurs qui ne prennent pas en charge les entités hexadécimales.)
Remarque: L'ajout de /
et '
à la liste des caractères d'échappement n'est pas très utile, car ils n'ont pas de signification particulière en HTML et n'ont pas besoin d'être échappés.
escapeHtml
Fonction d' origine
EDIT 2: La fonction d'origine a utilisé une variable ( chr
) pour stocker l'objet nécessaire au .replace()
rappel. Cette variable avait également besoin d'une fonction anonyme supplémentaire pour l'étendre, rendant la fonction (inutilement) un peu plus grande et plus complexe.
var escapeHtml = (function () {
'use strict';
var chr = { '"': '"', '&': '&', '<': '<', '>': '>' };
return function (text) {
return text.replace(/[\"&<>]/g, function (a) { return chr[a]; });
};
}());
Je n'ai pas testé laquelle des deux versions est la plus rapide. Si vous le faites, n'hésitez pas à ajouter des informations et des liens à ce sujet ici.