HtmlSpecialChars équivalent en Javascript?
Apparemment, c'est plus difficile à trouver que ce que je croyais être. Et c'est même tellement simple...
Est-il une fonction équivalente à PHP htmlspecialchars construit en Javascript? Je sais que c'est assez facile à mettre en œuvre vous-même, mais à l'aide d'une fonction intégrée, si disponible, est juste plus agréable.
Pour ceux qui ne connaissent PHP, htmlspecialchars se traduit par des trucs comme <htmltag/>
en <htmltag/>
Je sais que escape()
et encodeURI()
ne fonctionnent pas de cette façon.
- php a eu quelques vraiment bons outils, var_dump, print_r, htmlspecialchars etc. Malheureusement je soupçonne n'est pas la même chose avec js. js alerte est si pauvre. Un moyen rapide de voir que certains inattendu (et invisible dans la boîte d'alerte) de la chaîne est à venir, est d'alerter la longueur de la chaîne au lieu de la chaîne itslef.
- Double Possible de s'Échapper les chaînes HTML avec jQuery
Vous devez vous connecter pour publier un commentaire.
Il y a un problème avec votre solution de code, il ne fera que s'échapper de la première occurrence de chaque caractère spécial. Par exemple:
Voici le code qui fonctionne correctement:
Mise à jour
Le code suivant va produire des résultats identiques à ci-dessus, mais elle est plus performante, en particulier sur les gros blocs de texte (merci jbo5112).
&
. Est-il possible de la&
est déjà codé comme&
, et ce code code il de nouveau à&amp;
, de sorte que&
est ce qui est réellement affiché sur l'écran?Hey, look at g.com?a=1&b=2 & tell me what do you think.
, seule la deuxième&
doit être encodé. Je suppose qu'il devrait être de la responsabilité du plugin pour coder tout sauf Url parce qu'ils possèdent le code qui identifie l'URL.`
C'est de Codage HTML. Il n'y a pas de javascript natif de la fonction pour le faire, mais vous pouvez google et d'obtenir un peu bien fait jusqu'ceux.
E. g. http://sanzon.wordpress.com/2008/05/01/neat-little-html-encoding-trick-in-javascript/
EDIT:
C'est ce que j'ai testé:
De sortie:
<htmltag/>
encodeURIComponent
n'et pas du tout ce que l'OP a demandé. Alors pouvez-vous modifier? Je ne peux pas me défaire de mon -1.div
élément et un nœud de texte. La création d'un nœud de texte avec le texte ` <img src=faux onerror=alert(1337)>` faudra juste créer un nœud de texte, pas unimg
élément.var div = document.createElement('div'); div.textContent = '<htmltag/>'; console.log(div.innerHTML);
Intéressant à lire:
http://bigdingus.com/2007/12/29/html-escaping-in-javascript/
Note: n'exécutez cette fois. Et de ne pas l'exécuter sur déjà encodées par exemple
&
devient&amp;
Avec jQuery, il peut être comme ceci:
À partir d'une question relative à la Échapper les chaînes HTML avec jQuery
Comme mentionné dans le commentaire de guillemets doubles et les guillemets simples sont à gauche comme tel pour cette mise en œuvre. Cela signifie que cette solution ne doit pas être utilisé si vous avez besoin de faire attribut d'élément comme matière première chaîne html.
<!-- Caps rage begin -->
Cette réponse devrait score NÉGATIF, car il NE vient MÊME PAS PRÈS DE RÉPONDRE à LA QUESTION "HtmlSpecialChars équivalent".<!-- Caps rage end -->
il-ne-pas-escape-citations-jésus-christ-et-autres-divinités. OMG vous jquery personnes.Voici une fonction pour échapper HTML:
Et à décoder:
Underscore.js fournit une fonction pour ça:
http://underscorejs.org/#escape
Ce n'est pas un construit en fonction Javascript, mais si vous êtes déjà à l'aide de Souligner qu'il est une meilleure alternative que d'écrire votre propre fonction si vos cordes pour convertir ne sont pas trop grandes.
Encore une autre façon de faire cela est de renoncer à tout le mappage de caractères tout à fait et au lieu de convertir tous les caractères indésirables dans leurs références à des caractères numériques, par exemple:
Note que les RegEx ne gère que les caractères spécifiques de l'OP voulait s'enfuir, mais, en fonction du contexte qui l'a échappé HTML va être utilisé, ces caractères peuvent ne pas être suffisantes. Ryan Grove article Il n'y a plus de HTML échapper que &, <, >, et " est une bonne lecture sur le sujet. Et en fonction de votre contexte, la RegEx suivante peut très bien être nécessaire afin d'éviter l'injection XSS:
exemple :
Les Chances sont que vous n'avez pas besoin d'une telle fonction. Depuis votre code est déjà dans le navigateur*, vous pouvez accéder au DOM directement au lieu de générer et de codage HTML qui doivent être décodées à l'envers par le navigateur utilisé.
Utilisation
innerText
propriété pour insérer du texte brut dans les DOM en toute sécurité et beaucoup plus rapide que d'utiliser l'un de l'présenté échapper fonctions. Même plus rapide de l'affectation statique preencoded chaîne deinnerHTML
.Utilisation
classList
pour modifier les classes,dataset
pour définirdata-
attributs etsetAttribute
pour les autres.Tous ces va gérer échapper pour vous. Plus précisément, aucun échappement est nécessaire et aucun codage ne sera effectué en-dessous**, puisque vous travaillez autour de HTML, la représentation textuelle de DOM.
JS:
CSS:
HTML:
* Cette réponse n'est pas prévu pour JavaScript côté serveur les utilisateurs (Node.js, etc.)
** Sauf si vous avez explicitement le convertir en HTML par la suite. E. g. en accédant à
innerHTML
- c'est ce qui arrive lorsque vous exécutez$('<div/>').text(value).html();
suggéré dans d'autres réponses. Donc, si votre objectif final est d'insérer des données dans le document, en le faisant de cette manière que vous allez faire le travail deux fois. Aussi, vous pouvez voir que dans le code HTML obtenu tout n'est pas codé, que le minimum de ce qui est nécessaire pour qu'il soit valable. Il est fait en contexte-dépendante, c'est pourquoi cette méthode jQuery n'est pas de coder des devis et, par conséquent, ne devrait pas être utilisé comme un objectif général de escaper. Les guillemets s'échapper est nécessaire lorsque vous êtes à la construction de HTML comme une chaîne de caractères non approuvées ou citation contenant des données sur la place de la valeur d'un attribut. Si vous utilisez l'API DOM, vous n'avez pas de soins au sujet d'échapper à tout.el.textContent = str; el.innerHTML = el.innerHTML.replace(/\n/g, '<br>')
), ou de définir la CSSwhite-space
propriétépre
oupre-wrap
innerText
au lieu detextContent
. Alors qu'un peu plus lent et a quelques d'autres différences lors de la lecture de la propriété, il est plus intuitif qu'il ne le<br>
remplacement automatiquement lors de l'attribution d'elle.Pour Node.JS les utilisateurs (ou les utilisateurs utilisant Jade d'exécution dans le navigateur), vous pouvez utiliser le Jade de la fonction d'échappement.
Pas de sens dans l'écrit vous-même si quelqu'un d'autre est de le maintenir. 🙂
Espère que cela gagne la course en raison de ses performances et le plus important de ne pas enchaînés, la logique de l'aide .replace ("&", " &").replace('<','<')...
Inversion:
<
et&gr;
dans une chaîne de caractères.To write a greater than sign in HTML type &gt;
, il affiche>
au lieu de>
Je suis d'élaborer un peu sur l'o.k.w.'s réponse.
Vous pouvez utiliser le navigateur de fonctions DOM pour que.
Cela renvoie
<escapeThis>&
Il utilise la norme de la fonction
createElement
pour créer un élément invisible, puis utilise la fonctiontextContent
afin de définir la chaîne de son contenu, puisinnerHTML
pour obtenir le contenu dans sa représentation HTML.Cette solution utilise le code numérique des caractères, par exemple
<
est remplacé par<
.Bien que son rendement est légèrement pire que la solution à l'aide d'une carte, il a des avantages: