IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Passage d'une chaine à une fonction javascript


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 76
    Par défaut Passage d'une chaine à une fonction javascript
    Bonjour,

    Je travaille en .net c# et je tente de passer une chaîne de caractère à une fonction javascript depuis mon code behind.

    Je n'ai aucun souci sur des chaines simples, mais dès que cela devient complexe, je plante sur des caractères spéciaux.

    J'ai bien remplacé les " par \" mais ca ne semble pas suffire, il y en a d'autres qui empechent le bon fonctionnement.

    Exemple d'une chaine: (qui affiche un petit texte avec une couleur et une police... pas bien compliqué normalement)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "<p><span style="font-size: medium; color: #000000; background-color: #ff6600;"><span style="font-size: xx-large;">coucou</span>, c'est juste <strong>un test</strong></span></p>  <p><span style="background-color: #ffff00;">voilou</span></p>  <p>&nbsp;</p>  <p><span style="background-color: #ffff00;"><span style="font-family: arial black,avant garde; font-size: small;"><em><span style="text-decoration: underline;"><span style="background-color: #339966;">c'est modifi&eacute; ^^</span></span></em></span><br /></span></p>"
    Que dois-je faire ?
    y a t'il une méthode toute faite pour faire cela ?

    MErci d'avance,

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 208
    Par défaut
    Bonjour,
    le plus simple me semble t-il est de mettre ta chaine entre '
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var chaine = 'la chaine incluse';
    dans ce cas les doubles quote, ", ne pose pas de problème
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var chaine = 'la chaine "incluse" avec des doubles quote';
    et pour insérer une simple quote, ', il faut échapper celle ci avec un antislash \
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var chaine = 'la chaine c\'est rompue';

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 76
    Par défaut
    Effectivement tes conseils marchent très bien dans la fonction javascript.

    Mais mon souci est que je l'appelle depuis le code behind.. Et la cela ne change rien...

    Je génère en fait dynamiquement un évènement sur un GridView.

    e.Row.Attributes.Add("onmouseover", "FctJavaScript('" + chaine + "')");

    Je seche un peu sur la syntaxe de la chaine...

    Une idée ?

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 208
    Par défaut
    dans ce cas il faur également échapper les " avec un \
    ta chaine devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '<p><span style=\"font-size: medium; color: #000000; background-color: #ff6600;\"><span style=\"font-size: xx-large;\">coucou</span>, c\'est juste <strong>un test</strong></span></p> <p><span style=\"background-color: #ffff00;\">voilou</span></p> <p>&nbsp;</p> <p><span style=\"background-color: #ffff00;\"><span style=\"font-family: arial black,avant garde; font-size: small;\><em><span style=\"text-decoration: underline;\"><span style=\"background-color: #339966;\">c\'est modifi&eacute; ^^</span></span></em></span><br /></span></p>'

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 76
    Par défaut
    Oulah je dois m'y prendre comme un pied

    Bon voici le code C#.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    string MaChaine = ... (lecture colonne de table SQL)
     
    MaChaine.Replace('"', '\"');
     
    MaChaine= " ' " + MaChaine + " ' ";
     
    e.Row.Attributes.Add("onmouseover", "FctJavaScript( ' " + MaChaine+ " ')");
     
    Et le code Javascript:
     
    function ShowTip(MaChaine) 
            {
                document.getElementById("Label1").innerHTML = MaChaine;              
            }
    Au final Firebug me dit soit :
    - missing ) after argument list
    soit d'autres messages sur des caracteres manquants...

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 208
    Par défaut
    en C# je ne sais pas mais en javascript
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var chaine = 'c\'est "bien"';
    chaine= chaine.replace(/"/g, '\\"');
    alert( chaine);
    le \ étant un caractère d'échappement il faut l'échapper

  7. #7
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 76
    Par défaut
    Elle fait quoi ta deuxieme ligne ?
    Je veux dire, elle remplace quoi par quoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaine= chaine.replace(/"/g, '\\"');

  8. #8
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 208
    Par défaut
    (/"/g, '\\"');

    /"/g est l'expression régulière
    /"/ c'est le caractère à remplacer , ici " mis entre slash
    g est la façon de traiter la recherche, g = global

    (/"/g, '\\"');
    \\" est la valeur de remplacement

    en résumé on remplace " par \" dans toute la chaine

    EDIT
    je ne suis pas un spécialiste en RegExp et ne suis donc pas sûr que cela soit clair.

  9. #9
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 76
    Par défaut
    ok merci à toi. vais voir tout ca.

  10. #10
    Membre éclairé Avatar de Billy KiT
    Inscrit en
    Mars 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 66
    Par défaut
    Salut,
    c'est moi ou tu mets 2 fois les ' ' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MaChaine= " ' " + MaChaine + " ' ";
    e.Row.Attributes.Add("onmouseover", "FctJavaScript( ' " + MaChaine+ " ')");
    Il faut soit virer la première ligne, soit écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MaChaine= " ' " + MaChaine + " ' ";
    e.Row.Attributes.Add("onmouseover", "FctJavaScript(" + MaChaine+ ")");
    enfin il me semble

  11. #11
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 76
    Par défaut
    Citation Envoyé par Billy KiT Voir le message
    Salut,
    c'est moi ou tu mets 2 fois les ' ' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MaChaine= " ' " + MaChaine + " ' ";
    e.Row.Attributes.Add("onmouseover", "FctJavaScript( ' " + MaChaine+ " ')");
    Il faut soit virer la première ligne, soit écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MaChaine= " ' " + MaChaine + " ' ";
    e.Row.Attributes.Add("onmouseover", "FctJavaScript(" + MaChaine+ ")");
    enfin il me semble
    En effet... Mais ca change pas grand chose...

    J'ai toujours les mêmes messages, soit "unterminated string literal", soit "missing ) after argument list".

    si je prends ma chaine en dur directement dans la fonction javascript de la manière suivante, je n'ai aucun souci. (J'ai bien ajouter les simples quotes au début et à la fin + échapper les simples quotes dans la chaine).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function ShowTip(description) 
            {
                var chaine = '<p><span style="font-size: medium; color: #000000; background-color: #ff6600;"><span style="font-size: xx-large;">coucou</span>, c\'est juste <strong>un test</strong></span></p>  <p><span style="background-color: #ffff00;">voilou</span></p>  <p>&nbsp;</p>  <p><span style="background-color: #ffff00;"><span style="font-family: arial black,avant garde; font-size: small;"><em><span style="text-decoration: underline;"><span style="background-color: #339966;">c\'est modifi&eacute; ^^</span></span></em></span><br /></span></p>';
     
                document.getElementById("Label1").innerHTML = description ;
     
            }
    Mais l'envoyer dynamiquement depuis le code behind, c'est mission impossible, je deviens chèvre !!! j'essaye tout dans tous les sens !

    Il y a des caractères qui bloquent, mais lesquels ???

    Voici le résultat dans Firebug..

    onmouseover="ShowTip('&lt;p>&lt;span style=&quot;font-size: medium; color: #000000; background-color: #ff6600;&quot;>&lt;span style=&quot;font-size: xx-large;&quot;>coucou&lt;/span>, cest juste &lt;strong>un test&lt;/strong>&lt;/span>&lt;/p>
    &lt;p>&lt;span style=&quot;background-color: #ffff00;&quot;>voilou&lt;/span>&lt;/p>
    &lt;p>&amp;nbsp;&lt;/p>
    &lt;p>&lt;span style=&quot;background-color: #ffff00;&quot;>&lt;span style=&quot;font-family: arial black,avant garde; font-size: small;&quot;>&lt;em>&lt;span style=&quot;text-decoration: underline;&quot;>&lt;span style=&quot;background-color: #339966;&quot;>cest modifi&amp;eacute; ^^&lt;/span>&lt;/span>&lt;/em>&lt;/span>&lt;br />&lt;/span>&lt;/p>')"

  12. #12
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Essaye de localiser les passages de ta chaîne qui posent problème et de régler un problème à la fois (en faisait une sous chaîne ne contenant que la partie posant problème), ce sera beaucoup plus simple.

  13. #13
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 76
    Par défaut
    Oui, en effet, tu as raison.

    bon c'est bien les simples quotes qui posent pb dans le code behind...

    Si je passe ca, aucun souci...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    string test = "cest juste un test";
    e.Row.Attributes.Add("onmouseover", "ShowTip('" +  test + "')");
     
    function ShowTip(test) 
            {              
                document.getElementById("Label1").innerHTML = test;         
            }
    Par contre ca, c'est foutu... Pourtant l'apostrophe est échappée non ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    string test = "c\'est juste un test";
    e.Row.Attributes.Add("onmouseover", "ShowTip('" +  test + "')");
     
    function ShowTip(test) 
            {              
                document.getElementById("Label1").innerHTML = test;         
            }
    Il me met:
    missing ) after argument list
    [Stopper sur une erreur] ShowTip('c'est juste un test')

  14. #14
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    en javascript oui, mais si ça passe d'abord par un langage serveur il faut aussi l'échapper pour ce langage.
    Dit autrement : il faut que dans ton javascript ta chaîne contienne le caractère d'échappement. Donc côté serveur il faut que tu génères une chaîne affichant un caractère d'échappement.
    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //Serveur :
    string test = "c\\'est juste un test";
    // Javascript (client) :
    string test = "c\'est juste un test";
    Il faut d'ailleurs que tu échappe ton "\" à chaque fois que ta chaîne est évaluée (elle ne l'est pas forcément qu'une fois par le serveur et par le client, dans le cas des regex par exemple elle le sera 2 fois par le client : par javascript d'abord, par la regex ensuite).
    Une méthode bourrin pour savoir combien d'échappement est nécessaire est de doubler le nombre de "\" tant que ça passe pas : "\", "\\", "\\\\", "\\\\\\\\", ... Inutile de t'embetter avec les valeurs intermédiaires (genre 6 "\") car elles n'ont aucun sens si on comprend la logique de l'échappement.

    PS :
    en javascript tu ne peux pas déclarer de variable de type "string", c'est forcément un "var".

  15. #15
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 76
    Par défaut
    mouarf, échapper l'échappement... c'est des malades

    Ok bon je dois être maudit ...

    Je coups ma chaine en 3 parties.

    Je l'assigne en dur dans un string dans le code behind.

    Je fais donc un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    string test = "<p><span style=\"background-color: #ffff00;\">voilou</span></p>";
     
    test = test.Replace("'", "\\'");
     
    e.Row.Attributes.Add("onmouseover", "ShowTip('" +  test + "')");
    Aucun souci....

    Je rajoute des bouts au fur et à mesure jusqu'à passer la chaine complete, aucun souci...

    J'utilise alors ma variable qui vient de SQL directement (c'est une colonne de table en fait)

    donc ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    string test = row.Description;
    test = test.Replace('"', '\"').Replace("'", "\\'");
    e.Row.Attributes.Add("onmouseover", "ShowTip('" +  test + "')");
    ca marche plus ouiiiiiin, j'en ai marre....

    rhaaa je crois que je le tiens... En fait il me rajoute des \r\n dans ma chaine lorsque elle vient de SQL ce c...

  16. #16
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Ca ne sert à rien de faire le replace côté client (en javascript donc). Si ta chaîne est mal formée en javascript tu ne peux plus rien faire dessus...

  17. #17
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 76
    Par défaut
    Citation Envoyé par Loceka Voir le message
    Ca ne sert à rien de faire le replace côté client (en javascript donc). Si ta chaîne est mal formée en javascript tu ne peux plus rien faire dessus...
    je ne le fait pas coté client le replace...

    Mais le pb semble venir des \r\n qu'il me rajouter lorsqu'il vient de SQL.

  18. #18
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 76
    Par défaut
    ouaip ok c'est bon...

    Bon venant de SQL il faut bien faire un ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test = test.Replace("'", "\\'").Replace("\r\n", " ");
    Les doubles quotes sont automatiquement gérées, par contre il faut traiter les \r\n qu'il rajoute...

    ouf... merci à vous !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/11/2010, 18h22
  2. [RegExp] Détecter des combinaisons dans une chaine une par une
    Par vermine dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 08/06/2010, 13h22
  3. Réponses: 11
    Dernier message: 05/12/2008, 10h31
  4. Réponses: 4
    Dernier message: 01/05/2008, 18h15
  5. Réponses: 4
    Dernier message: 26/12/2005, 17h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo