45 votes

Échappement des guillemets simples dans les paramètres des fonctions JavaScript

Je dois échapper aux guillemets simples dans les paramètres des fonctions JavaScript pour éviter cela :

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 j'ai besoin de les échapper à l'intérieur d'un appel de fonction puisque je ne connais pas les valeurs qui seront passées (variables de la base de données que je ne peux pas échapper à la base de données).

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

onclick="Javascript:function(escape(param1), escape(param2), escape(param3));"

3 votes

' = \' (Comme vous le feriez pour une chaîne normale). Et comme vous l'insérez dans le balisage, il faut soit vous doit l'échapper, ou si un langage côté serveur le génère, assurez-vous que il y échappe.

0 votes

Vous pouvez mettre vos paramètres à l'intérieur escape(param)

4 votes

L'étiquette Javascript: n'est pas nécessaire à cet endroit. Vous devez utiliser d'autres moyens pour lier les gestionnaires d'événements : quirksmode.org/js/introevents.html alors vous n'avez pas à vous soucier des devis.

19voto

Mike Samuel Points 54712
 JSON.stringify(plainTextStr).replace(/&/, "&").replace(/"/g, """)

produira une chaîne que vous pourrez intégrer sans risque dans un attribut entre guillemets et qui aura la même signification lorsqu'elle sera vue par l'interprète JavaScript.

La seule réserve est que certains Unicode nouvelles lignes (U+2028 et U+2029) doivent s'échapper avant d'être intégrés dans des chaînes de caractères JavaScript, mais JSON exige seulement que les éléments suivants soient utilisés \r y \n s'échapper.

11voto

Iain M Norman Points 1554

Échappez l'apostrophe avec une barre oblique inversée :

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

4 votes

Veuillez retirer le Javascript: . Il n'y a rien de mal à le mettre là, mais il n'est pas non plus d'une grande utilité et les développeurs moins expérimentés pourraient penser qu'il est nécessaire.

2 votes

J'ai besoin d'une fonction pour effectuer l'échappement à l'intérieur de l'appel myfunction, car c'est le seul endroit auquel je peux accéder. Une suggestion ?

0 votes

Cela échouera si la chaîne contient " ,  , '\' ou toute autre entité qui code des guillemets simples ou doubles ou des barres obliques inversées. Par exemple, la chaîne 'foo " onmouseover=alert(1) ne contient pas de guillemet simple, mais lorsqu'il est intégré dans un attribut HTML, il exploite une vulnérabilité XSS. De même, 'foo \ échouera, parce que le parseur JavaScript verra `, not \` donc le guillemet fermant sera interprété comme faisant partie de la chaîne de caractères, donc si la prochaine valeur de chaîne est ` alert(1)). // `, alors cela sera traité comme du JavaScript littéral, ce qui entraînera une exécution arbitraire de script également.

7voto

tim Points 1385

Ce n'est peut-être pas tout à fait clair dans la question, mais en supposant que tout ce que vous voulez est d'envoyer ceci à un script PHP pour le stocker dans une base de données, vous utiliseriez bien sûr idéalement les différentes méthodes de PHP telles que stripslashes() -- Mais si vous n'essayez pas d'être trop fantaisiste, le simple fait d'ajouter un slash devant chaque citation suffit à envoyer une requête SQL directement en PHP depuis le client. C'est pas sûr mais peut-être pas nécessaire non plus.

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

fait l'affaire, 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.

3voto

Irrmich Points 406

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

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

Puis récupérez le texte original :

var originalText = decodeURIComponent(Url);

1voto

amit Points 289
var cmpdetail = cmpdetail.replace(/'/g, "\\'");

cela fonctionne pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X