2010-06-02 6 views

Répondre

2

Il n'y a rien intégré (sauf innerHTML sérialisation qui est super douteux à cet effet), vous auriez à écrire vous-même, par exemple .:

function encodeXml(s) { 
    return (s 
     .replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, ''') 
     .replace(/</g, '&lt;').replace(/>/g, '&gt;') 
     .replace(/\t/g, '&#x9;').replace(/\n/g, '&#xA;').replace(/\r/g, '&#xD;') 
    ); 
} 

Ceci est une fonction qui se échappe maximaliste pour la sécurité :

  • il sera toujours encoder ", ' et onglet/caractères CR/LF mais ils ne doivent être échappé à une valeur d'attribut, où ce caractère de citation particulière est utilisé comme séparateur.

  • il codera toujours > bien que cela ne doit réellement être échappé qu'une partie de la séquence ]]> dans le contenu du texte.

Si vous n'avez pas besoin de ces propriétés, vous pouvez supprimer les replace s vous ne avez pas besoin (il est assez rare d'avoir besoin de mettre onglet/CR/LF dans une valeur d'attribut, par exemple).

Si vous avez besoin de produire du XHTML compatible HTML, utilisez &#39; au lieu de &apos; si vous avez besoin de cette évasion.

En général, vous devriez éviter htmlentities et utiliser htmlspecialchars à la place, comme htmlentities code inutilement tous les caractères non-ASCII comme références des entités HTML, ce qui a aussi des effets secondaires de vissage votre texte si vous ne donnez pas le droit $charset paramètre.

Questions connexes