L'évasion traditionnelle
Si vous utilisez le langage XHTML, vous devrez utiliser une balise CDATA
section. Vous pouvez également les utiliser en HTML, mais celui-ci n'est pas aussi strict.
J'ai séparé les constantes de chaîne pour que ce code puisse fonctionner en ligne sur le XHTML dans les blocs CDATA. Si vous fournissez votre JavaScript sous forme de fichiers séparés, vous n'avez pas besoin de vous soucier de cela. Notez que si vous sont en utilisant XHTML avec JavaScript en ligne, alors vous besoin de d'enfermer votre code dans un bloc CDATA, sinon une partie de ce programme ne fonctionnera pas. Vous rencontrerez des erreurs étranges et subtiles.
function htmlentities(text) {
var escaped = text.replace(/\]\]>/g, ']]' + '>]]><' + '![CDATA[');
return '<' + '![CDATA[' + escaped + ']]' + '>';
}
Nœud de texte DOM
La façon "correcte" d'échapper du texte est d'utiliser la fonction DOM document.createTextNode
. Cela n'échappe pas réellement le texte ; cela indique simplement au navigateur de créer un élément texte, qui n'est pas analysé par nature. Vous devez cependant être prêt à utiliser le DOM pour que cette méthode fonctionne : c'est-à-dire que vous devez utiliser des méthodes telles que appendChild
par opposition à la innerHTML
et autres. Cela permettrait de remplir un élément avec l'ID an-element
avec du texte, qui ne serait pas analysé comme du (X)HTML :
var textNode = document.createTextNode("<strong>This won't be bold. The tags " +
"will be visible.</strong>");
document.getElementById('an-element').appendChild(textNode);
jQuery DOM Wrapper
jQuery fournit un wrapper pratique pour createTextNode
nommé text
. C'est assez pratique. Voici la même fonctionnalité en utilisant jQuery :
$('#an-element').text("<strong>This won't be bold. The tags will be " +
"visible.</strong>");