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.

0voto

James Montagne Points 44517

Si je vous comprends bien, je ne crois pas que ce que vous essayez de faire soit possible. Vous devrez échapper les guillemets du côté du serveur. Toute fonction qui échapperait les guillemets pour vous serait elle-même une fonction nécessitant une chaîne de caractères valide, ce qui signifie qu'elle devrait être échappée avant d'être transmise à la fonction.

0voto

Ron Royston Points 5179

Je préfère utiliser le guillemet simple pour définir les chaînes JavaScript. Ensuite, j'échappe mes guillemets doubles intégrés comme suit.

C'est comme ça que je fais, en gros 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>

0voto

Kenneth Leung Points 51

J'ai rencontré un problème similaire récemment, et je l'ai résolu en remplaçant le guillemet simple par l'unicode correspondant ( &#39; )

Initialement, mon code était le suivant, ce qui fait que j'ai obtenu des résultats qui ont été coupés (par ex. Jane's Coffee est devenu juste Jane dans la sortie).

b.innerHTML += "<input type='hidden' value='" + arr[i] + "'>";

Lorsque j'ai introduit le remplacement unicode (voir ci-dessous), j'ai obtenu le résultat exact que je souhaitais

b.innerHTML += "<input type='hidden' value='" + arr[i].replace("'", "&#39;") + "'>";

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