Échapper les Guillemets En HTML5, l'Attribut de Données à l'Aide de Javascript
Je suis à l'aide de jQuery .data()
de travailler avec des personnalisés HTML5 attributs de données où la valeur de l'attribut doit être capable de contenir à la fois des apostrophes et des guillemets:
<p class="example" data-example="She said "WTF" on last night's show.">
Je sais à l'aide de codes de caractères comme "
dans le données de la valeur de l'attribut pourrait faire le travail ci-dessus, mais je ne peux pas toujours contrôler la façon dont les valeurs sont saisies. De Plus, j'ai besoin d'être en mesure d'utiliser des balises HTML dans la balise, comme ceci:
<p class="example" data-example="
She said "<abbr title="What The F***">WTF</abbr>" on last night's show.
">
Si une certaine forme de .replace()
est la réponse, alors il doit être fait avant que la valeur est lue par .data()
—peut-être en l'appliquant dans l'ensemble de <body>
?
Normal barre oblique inverse s'échapper comme <abbr title="te\'st">WTF</abbr>
ne fonctionne pas non plus.
Dans l'idéal, ce serait d'avoir la possibilité de travailler avec deux:
data-example="..."
et
data-example='...'
Mais si c'est la seule possible, alors je pourrais au moins rouler avec que. Des idées?
Mise à jour - un peu plus de contexte:
Je suis en train de travailler sur ce pour responsejs.com. Une application réelle de ce qui pourrait être à la seule charge d'une barre latérale pour les navigateurs au-dessus d'une certaine largeur (et ont-ils gérés dans le navigateur plutôt que de PHP). Dans le cas de WordPress par exemple, la barre latérale peut contenir des widgets, des images, etc. Les guillemets à l'intérieur des balises PHP sont un non-problème b/c ils sont analysés en HTML avant de le navigateur. Exemple:
<aside id="primary" class="sidebar"
data-oweb='
<?php dynamic_sidebar( 'primary' ); ?>
'
>
optional default markup for mobile and no-js browsers here
</aside>
- JavaScript ne sera pas vous aider une fois que la page a rendus à corriger les citations de la balise. Doit être fait sur le server-side.
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas moyen de contourner cela, vous avez pour échapper à l'valeurs correctement, ou le HTML ne peut pas être analysée correctement. Vous ne pouvez pas utiliser Javascript pour corriger le code après il est analysé, car il a déjà échoué.
Votre exemple avec le bon encodage HTML serait:
Vous ne pouvez pas utiliser la barre oblique inverse pour échapper les caractères, car il n'est pas du code Javascript. Vous utilisez des entités HTML pour les caractères d'échappement dans le code HTML.
Si vous ne pouvez pas contrôler la façon dont les données d'entrée, puis, vous êtes foutus. Vous devez simplement trouver un moyen de prendre le contrôle sur elle.
htmlspecialchars()
avecENT_QUOTES
pour l'imprimer par exemple<?php echo(htmlspecialchars($myValue,ENT_QUOTES)) ?>
Pour plus d'info: php.net/manual/en/function.htmlspecialchars.phpSi elles doivent être les chaînes HTML avec
"
et'
et autres joyeusetés, pourquoi ne pas simplement faire de séparer les éléments HTML pour eux: http://jsfiddle.net/N7XXu/.E. g. le code HTML:
en combinaison avec le code JavaScript suivant:
Bien sûr, de masquer le
.example-data
éléments.Utilisation encodeURI d'échapper les guillemets dans votre objet JSON. Analyser la chaîne avec decodeURI.
JS:
HTML:
Pour qu'il soit bon html, vous avez pour échapper à la troublante caractères. J'avais l'échapper avec des entités HTML. Cela signifie que quel que soit l'outil utilisé pour la saisie de cette information pourrait avoir avoir à les stocker correctement et/ou de l'outil de récupération sur le dos fin aurait à leur échapper.
Alors si vous voulez les utiliser dans votre JS, vous devez exécuter une recherche-remplacement des fonctions pour convertir les caractères de retour dans le HTML et les guillemets.
Plus de back-end dev langues ont une sorte de " htmlescape/ne pas encoder les fonctionnalités, de sorte que ne devrait pas être dur.
De ne pas encoder via jQuery, voici quelque chose trouvés via un rapide Google: http://www.naveen.com.au/javascript/jquery/encode-or-decode-html-entities-with-jquery/289
Ici est un simple outil que j'ai créé, vous pouvez l'utiliser pour coder en html:
L'astuce est de s'échapper deux fois.
J'ai ajouté un autre \n remplacer pour préserver texte multiligne, car il est rejeté par le texte().
En outre vous avez besoin d'échapper les guillemets pour le rendre sûr pour un attribut de données.
Cela devrait créer un attribut de données sécurité de la chaîne.
Vous pouvez le tester ici: http://jsfiddle.net/SplicePHP/n6HFq/
À décoder retour html suffit d'utiliser:
Il est un peu difficile, mais vous pouvez sélectionner les objets dom avec leur
data
attributs qui contient des guillemets simples. Le truc, c'est\\'
Violon
Comme je l'ai utiliser l'attribut data pour transporter des données en collaboration avec l'élément html en PHP
pour le JavaScript, je viens d'utiliser
base64_encode
sur le serveur principal , puis sur le côté client d'utiliserbase64Decode(input)
récupérer les données. Cela me permet d'éviter de tout et de tous échapper à l'orgie.Le JavasScript code que j'ai utiliser se trouve ici http://www.webtoolkit.info/
Nouveau à Débordement de Pile donc je n'ai pas assez de points de rep pour voter, mais je tenais à préciser la solution que j'ai mal interprété la accepté de répondre par @Guffa que j'ai été vissé.
J'ai eu une question similaire concernant l'évasion/caractères spéciaux en HTML5 attributs data -. La cause/solution: Évasion/Caractères Spéciaux à partir de la saisie de l'utilisateur HTML5 de données d'attributs à l'aide de l'URL de codage/Décodage
Dan Smith a fourni la solution que j'ai utilisé avec encodeURI()/decodeURI(). Cependant, j'ai rejeté d'abord parce qu'il était si loin avec seulement 1 points de rep.
Toutes les réponses manuellement échapper les caractères deviennent confus et beaucoup de temps.
Toutes les réponses avec méthode escape() sont désormais obsolète. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/escape
J'aime pour stocker des données en javascript directement. Au lieu de cela:
Ce faire:
Ou si l'utilisation est dans un script à distance de vous contrôler, stocker la valeur(s) dans un contexte mondial:
Ou si vous ne pouvez pas contrôler le script à distance, et les informations doivent être stockées en tant que données d'attribut, vous pouvez le configurer avec javascript après vous trouver un moyen pour cibler le paragraphe:
Utiliser le
btoa
méthode pour définir les données et lesatob
méthode pour l'obtenir:Ou tout simplement de déréférencement de la chaîne comme une variable:
Références