Je souhaite afficher un texte en HTML par une fonction javascript. Comment puis-je échapper les caractères spéciaux html dans JS? Existe-t-il une API?
javascript
html
fernando123
la source
la source
Réponses:
la source
replace()
appels ne sont pas nécessaires. De vieilles chaînes simples à caractère unique feraient aussi bien l'affaire.la source
Vous pouvez utiliser la
.text()
fonction de jQuery .Par exemple:
http://jsfiddle.net/9H6Ch/
De la documentation jQuery concernant la
.text()
fonction:Les versions précédentes de la documentation jQuery le formulaient de cette façon (nous soulignons ):
la source
const str = "foo<>'\"&";
$('<div>').text(str).html()
rendementsfoo<>'"&
Je pense que j'ai trouvé la bonne façon de le faire ...
la source
document.createTextNode("<script>alert('Attack!')</script>").textContent
Utiliser lodash
code source
la source
C'est, de loin, le moyen le plus rapide que je connaisse. De plus, il fait tout sans ajouter, supprimer ou modifier des éléments sur la page.
la source
var divCode = '<div data-title="' + escapeHTML('Jerry "Bull" Winston') + '">Div content</div>'
obtiendrez un code HTML non valide!Il était intéressant de trouver une meilleure solution:
Je n'analyse pas
>
car il ne casse pas le code XML / HTML dans le résultat.Voici les repères: http://jsperf.com/regexpairs Aussi, j'ai créé une
escape
fonction universelle : http://jsperf.com/regexpairs2la source
La façon la plus concise et la plus performante d'afficher du texte non codé est d'utiliser la
textContent
propriété.Plus rapide que l'utilisation
innerHTML
. Et c'est sans prendre en compte l'échappée des frais généraux.la source
</
soit respectée.Les éléments DOM prennent en charge la conversion de texte en HTML en l'attribuant à innerText . innerText n'est pas une fonction mais son affectation fonctionne comme si le texte était échappé.
la source
<br>
éléments à la place des sauts de ligne, qui peuvent casser certains éléments, comme les styles ou les scripts. LecreateTextNode
n'est pas sujet à ce problème.innerText
a quelques problèmes hérités / spec. Mieux à utilisertextContent
.Vous pouvez encoder chaque caractère de votre chaîne:
Ou ciblez simplement les personnages principaux dont vous devez vous soucier (&, inebreaks, <,>, "et ') comme:
la source
Une doublure (pour ES6 +):
Pour les anciennes versions:
la source
Nous avons rencontré ce problème lors de la création d'une structure DOM. Cette question m'a aidé à le résoudre. Je voulais utiliser un double chevron comme séparateur de chemin, mais l'ajout d'un nouveau nœud de texte entraînait directement l'affichage du code de caractère d'échappement, plutôt que le caractère lui-même:
la source
Si vous utilisez déjà des modules dans votre application, vous pouvez utiliser le module escape-html .
la source
Essayez ceci en utilisant la
prototype.js
bibliothèque:Essayez une démo
la source
J'ai trouvé cette solution.
Supposons que nous voulons ajouter du code HTML à l'élément avec des données dangereuses de l'utilisateur ou de la base de données.
Ce n'est pas sûr contre les attaques XSS. Maintenant, ajoutez ceci.
Donc c'est
Pour moi, c'est beaucoup plus facile que d'utiliser
.replace()
et cela supprimera !!! toutes les balises html possibles (j'espère).la source
<script>
en<script>
.