web-dev-qa-db-fra.com

Un guillemet simple dans les paramètres de la fonction JavaScript

J'ai besoin d'échapper aux guillemets simples dans les paramètres de la fonction JavaScript pour éviter ceci:

onclick="Javascript:INSERT_PRODUCT('188267','WILL AND GRACE','32311','L'ANNIVERSARIO DINOZZE ','20101113|04|18|','13/11/2010 0.00.00','CANALE 5  ',this);"

Mais je dois les échapper dans un appel de fonction car je ne connais pas les valeurs qui seront transmises (variables de base de données que je ne peux pas échapper de la base de données).

Existe-t-il une fonction qui me permet de faire quelque chose comme ce qui suit?

onclick="Javascript:function(escape(param1), escape(param2), escape(param3));"
40
Daniele Di Punzio
 JSON.stringify(plainTextStr).replace(/&/, "&").replace(/"/g, """)

produira une chaîne que vous pouvez intégrer en toute sécurité dans un attribut cité et qui aura la même signification si elle est vue par l'interpréteur JavaScript.

Le seul inconvénient est que certains Unicode newlines (U + 2028 et U + 2029) doivent être ignorés avant d'être incorporés dans des littéraux JavaScript, mais JSON exige uniquement que \r et \n soient échappés.

18
Mike Samuel

Échappez à l'apostrophe avec une barre oblique inverse:

onclick="INSERT_PRODUCT('188267','WILL AND GRACE ','32311','L\'ANNIVERSARIO DI NOZZE ','20101113|04|18|','13/11/2010 0.00.00','CANALE 5 ',this);"
11
Iain M Norman

La question ne l’est peut-être pas tout à fait clair, mais en supposant que tout ce que vous voulez, c’est d’envoyer cela à un script PHP pour le stocker dans une base de données, vous utiliseriez bien sûr les différentes méthodes de PHP, telles que stripslashes() - mais si N'essayez vraiment pas de faire trop de fantaisie, il suffit d'ajouter une barre oblique devant un guillemet simple pour envoyer une requête SQL directement dans PHP à partir du côté client. C'est pas sûr , mais peut-être pas nécessaire non plus.

str.replace(/'/g, "\\'"); // escaping \ with \, so used 2x

fait le tour., comme par exemple dans quelque chose comme ceci:

var body = $('#body').val().replace(/'/g, "\\'");
myCustomSQLqueryFunction("UPDATE mytable SET `content`='"+ body +"';" );

MySQL va maintenant stocker votre body comme vous le voyez dans le champ du formulaire.

7
tim

Cette fonction a fonctionné pour moi (elle supprime et restaure à nouveau la citation): En supposant que les données à envoyer soient la valeur d'un élément d'entrée,

var Url = encodeURIComponent($('#userInput').val().replace("'","\\'"));

Puis récupérez le texte original à nouveau:

var originalText = decodeURIComponent(Url);
3
Irrmich
var cmpdetail = cmpdetail.replace(/'/g, "\\'");

ça marche pour moi.

1
amit

Je préfère utiliser guillemets simples pour définir les chaînes JavaScript. J'échappe ensuite à mes guillemets incorporés comme suit.

Voici comment je le fais, essentiellement str.replace(/[\""]/g, '\\"').

var display = document.getElementById('output');
var str = 'class="whatever-foo__input" id="node-key"';
display.innerHTML = str.replace(/[\""]/g, '\\"');

//will return class=\"whatever-foo__input\" id=\"node-key\"
<span id="output"></span>

0
Ron Royston