9
votes

JavaScript - Comment évacuez des citations dans un var pour passer des données via JSON

Je passe quelques données via JSON à un service Web. Mon problème est que je passe HTML (d'une entrée TinyMCE), le Var a donc du contenu utilisant des citations et cela me donne des problèmes. Je passe les valeurs comme ceci:

 data: '{ id: "' + news_id + '", title: "' + news_title + '", body: "' + news_body + '" }',


2 commentaires

Vous pouvez échapper à des caractères spéciaux à l'aide du caractère "\" à l'arrière avant que le personnage ne soit échappé. Par ex. Utilisez \ "pour échapper à une double citation


news_body.replace (/ \\ / g, "\\ u005c"). Remplacez (/ g, '\\ u0022'). Remplacez (/ '/ g, "\\ u0027") Parce que des barres obliques comme le dernier caractère d'une corde provoquent également des problèmes.


4 Réponses :


17
votes

Utilisez le Remplacer () Méthode:

function esc_quot(text)
{
    return text.replace("\"", "\\\"");
}

data: '{ id: "' + esc_quot(news_id) + '", title: "' + esc_quot(news_title) + '", body: "' + esc_quot(news_body) + '" }',


1 commentaires

Cela a fonctionné pour moi: var bottons = [{"Type": "Social"}, {"Type": "Intégrer"}, {"Type": "Link", "URL": " Saukvalley.com "}, {"Type": "Email", "Annonceur": "La réfrigération de Bob", "à": "Annonceur @ Clientite.com "}; Cela revient d'une API, je les trompons dans les boutons de données de l'élément ATTR, puis le sortez lorsque l'élément est cliqué. Avant de définir l'élément de l'élément, attrtitons: boutons = boutons.replace ("" "", "\\\\" "); Edit: Stackoverflow n'a pas échappé à l'objet Array FYI.



-1
votes

Si vous connaissez PHP que vous pouvez utiliser une forme de fonction basée sur PHP

phpjs.org

Ils ont fait fonction JavaScript fonctionnant comme fonction de bibliothèque PHP. Vous pouvez utiliser la fonction AddSlashes d'ici.


0 commentaires

1
votes

Utilisez la fonction ci-dessous: xxx

par exemple: xxx

Beaucoup de fonctions telles que celles-ci peuvent être trouvées à http://phpjs.org/functions/index


1 commentaires

-1 - Cela ne fonctionne pas car il ajoute des barres obliques aux citations simples et doubles. Note "nous" est une chaîne JS, mais "we \ 've" est pas une chaîne JS valide comme vous avez tenté Pour échapper à une seule citation dans une chaîne délimitée par des citations doubles. Voir Stackoverflow.com/a/2275428/457571



14
votes

Plutôt que d'utiliser un code ponctuel, accédez à un codeur JSON JavaScript (tel que fourni par utilitaire JSON MSON A> ou json.js ), qui s'occupera de codage pour vous. Les grands navigateurs (IE8, FF 3.5+, Opera 10.5+, Safari & Chrome) Supporte le codage JSON et le décodage Nativement via un objet JSON. Une bibliothèque JSON bien écrite s'appuiera sur des capacités JSON natives lorsqu'elles sont présentes et offrent une mise en œuvre lorsqu'elle n'est pas possible. Bibliothèque Yui JSON est celui qui fait cela.

data: JSON.stringify({
  id: news_id,
  title: news_title,
  body: news_body
}),


2 commentaires

Merci. Maintenant, cela fonctionne correctement mais j'ai une question. J'utilise simplement "JSON.Stringify" (mon navigateur est FF 3.6.11), cela fonctionne donc sans l'implentant de la bibliothèque Yui JSON. Mais comment devrais-je le gérer pour les navigateurs plus âgés? Je suppose que pour les navigateurs plus âgés, il devrait être utilisé yui comme celui-ci "yahoo.lang.json.stringify", mais dois-je changer quoi que ce soit ou simplement à l'aide de données: json.stringifiez les chèques de navigateur pour JSON.Stringify et si c'est une Old navigateur, il utilisera le yahoo.lang.json.stringify à la place? Merci


L'échantillon ne visait pas spécifiquement yui. Si vous choisissez de compter sur Yui, vous utiliseriez son API et laissez-le faire tout sous le capot. Pour une bibliothèque plus claire, examinez de plus près la source Open Source JSON.JS . C'est transparent, mettant en œuvre l'objet Global JSON uniquement si une version native n'existe pas. Alors que de plus en plus de navigateurs soutiennent l'objet JSON natif (il fait partie du ECMAScript 3.1 < / a> standard), vous pouvez éventuellement éliminer progressivement Json.js simplement en l'inclusion, tandis que YUI nécessiterait une réécriture du code.