Unescaping esperluette caractères en javascript
Je vais avoir de la difficulté à correctement l'affichage des valeurs qui contiennent des caractères d'échappement (c'est à dire les apostrophes sont stockés en tant que \'
et pas '
et les crochets sont >
et <
plutôt que >
et <
).
Éléments stockés dans ma base de données ont les caractères (' < >
) s'est échappé (\' < >
), respectivement. Lorsque j'essaie d'ajouter de manière dynamique à la page en JavaScript, ils s'impriment dans l'échappé forme dans Firefox, plutôt que de retourner à leurs valeurs normales comme dans IE (<
est en cours d'impression au format HTML au lieu juste <
).
<html>
<head>
<script type="text/javascript">
$(document).ready(function() {
var str = ">";
$(document.body).html(str);
});
</script>
</head>
<body>
</body>
</html>
Je sais que si je n'ai tout simplement a remplacer, je peux l'imprimer correctement, mais, ce faisant, je suis en permettant l'injection de code HTML, c'est pourquoi j'ai échappé à la chaîne dans la première place.
AJOUTÉ:
Tout d'abord, je m'excuse des fautes dans mon post initial. Après un examen plus approfondi, dans le cas où je suis en utilisant $().html(), les cordes sont imprimer correctement. La fois où ils ne sont pas imprimer correctement quand je suis à l'aide d'un code comme ci-dessous.
var str = ">";
$('#inputField').val(str);
Dans cet exemple, le texte ">" est indiqué plutôt que ">". Est-il quelque chose que je peux faire pour résoudre ce problème?
$
personnages une erreur? Vous avez commencé avec &
et puis c'est devenu $
. Êtes-vous à l'aide de deux codages différents?Une raison quelconque vous ne pouvez pas utiliser ne pas encoder? w3schools.com/jsref/jsref_unescape.asp
Pas sûr de ce que votre problème est. Il fonctionne parfaitement en utilisant
$(document.body).html(" 3 is > 1");
. jsfiddle.net/xJwuDUne autre chose à noter: le Stockage de HTML rend plus difficile pour afficher le texte dans quelque chose qui n'est pas en HTML, comme le passage à l'alerte ou de l'invite. J'ai l'habitude de stocker ce que l'utilisateur a entré et s'échapper pour quelque format que ce soit, je suis de l'affichage (HTML, PDF, alerte, JSON). Si votre application ne va jamais à l'afficher en HTML (comme d'alerte), cela fonctionne bien.
Ils sont une erreur. J'ai édité le premier post. Désolé pour la confusion.
OriginalL'auteur Will Reese | 2011-07-14
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de les décoder comme ceci:
Démo: http://jsfiddle.net/QUbmK/
Vous pouvez déplacer le décoder une partie de la fonction de trop et l'appeler à la place:
OriginalL'auteur Mrchief
Tout d'abord, vous ne pouvez pas exécuter le code que vous avez dans votre exemple. document.le corps n'est pas prêt pour la manipulation dans la balise HEAD. Vous avez à courir qu'une fois le document chargé. Si j'ai mis ton code dans un endroit sûr pour s'exécuter, il fonctionne très bien comme vous pouvez le voir ici.
Donc ... il doit y avoir plus pour votre situation de l'exemple simple vous montrer ici. Vous pouvez voir votre exemple simple fonctionne très bien lorsque le code est mis à la bonne place:
http://jsfiddle.net/jfriend00/RDSNz/
OriginalL'auteur jfriend00
Cela n'arrive pas, du moins pas avec jQuery. Si vous le faites, littéralement:
$(document.body).html('<div>')
, vous obtiendrez<div>
imprimé à l'écran, pas undiv
tag. Si vous êtes en train de faire quelque chose de pas mentionnés dans votre question:utiliser
.text()
au lieu de.html()
ou remplacer tous les&
avec&
:>
plutôt que>
.Je pense que c'est en fait le contraire de ce qu'il veut. Il en veut pour afficher
<
mais c'est plutôt montrant<
dans FF.Ouais, j'ai réalisé et édité la question. La réponse Simple est qu'il fait quelque chose de différent de ce qui a été posté. Le code devrait fonctionner (sauf que c'est dans la tête et jquery n'est pas référencé)
OriginalL'auteur Mark Kahn