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

Langage PHP Discussion :

apostrophe dans une variable de fonction


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 371
    Par défaut apostrophe dans une variable de fonction
    Bonjour,

    Jai un souci et je ne sais pas comment m'en sortir.

    Je génère une page à l'aide de PHP en interrogeant un serveur LDAP.

    Voici le contenu de la cellule:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo " <td class=\"Col2\" onclick=\"VoirDetailContacte('" . $cn[$i] . "')\">" . $cn[$i] . "</td>\n";
    Le probleme est que $cn[$i] vaut: "Nom Prenom LES SABLES D'OLONNE".

    Comme vous pouvez le voir, j'ai besoin de l'apostrophe pour la fonction VoirDetailContacte.

    J'ai essayé de mettre une double apostrophe mais ca ne fonctionne pas.

    Comment je peux faire?

    Cordialement,

    Vandman

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 694
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 694
    Par défaut
    pour passer efficacement une valeur, vous pouvez déclarer une variable JavaScript comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var valeur = <?php echo json_encode($variable);?>;
    et vous pouvez ensuite utiliser cette variable dans votre fonction JavaScript

  3. #3
    Invité
    Invité(e)
    Par défaut
    La methode de mathieu est bien plus propre et devrait être utilisée si possible, mais parfois ce n'est pas possible (ou long/compliqué) quand on maintient du vieux code. Pour ce cas tu peux utiliser str_replace() sur $cn[$i] pour échapper les apostrophes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo " <td class=\"Col2\" onclick=\"VoirDetailContacte('" . str_replace("'", "\\'", $cn[$i]) . "')\">" . $cn[$i] . "</td>\n";

  4. #4
    Membre éclairé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 371
    Par défaut
    Bonjour,

    Je ne suis pas bien sure d'avoir compris ce que Mathieu veut dire.

    Le problème que j'ai est que je me balade entre php, javascript, php et postgresql...

    Le process =:
    je génère une page html à l'aide de php. J'obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td class=\"Col2\" onclick=\"VoirDetailContacte('Nom Prenom LES SABLES D'OLONNE')\">Nom Prenom LES SABLES D'OLONNE</td>
    ici, on voit que j'ai un premier problème avec l'apostrophe. je pense que Mrsky propose la bonne solution, ce qui me donnera:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td class=\"Col2\" onclick=\"VoirDetailContacte('Nom Prenom LES SABLES D\'OLONNE')\">Nom Prenom LES SABLES D'OLONNE</td>
    Quand j'appele la fonction javascript "VoirDetailContacte" qui est une fonction ajax qui fait appele à une base de donnée postgres, j'ai une autre probleme car la l'apostrophe est alors encore interprété autrement et que "\'" ne fonctionne pas dans postgres.

    C'est le bordel et c'est pas simple.

    Comment faire cela?

    Cordialement,
    vandman

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    En bref :
    Pour javascript, il faut que ton apostrophe soit échappée. Si la variable javascript est écrite par un script PHP, tu peux tout simplement utilise addslashes ou addcslashe, ou quelque chose du genre. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo " <td class=\"Col2\" onclick=\"VoirDetailContacte('" . addslashes ($cn[$i]) . "')\">" . $cn[$i] . "</td>\n";
    Pour postgre : comment fais-tu la requête ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Pour éviter de surcharger ton code, tu pourrais utiliser un gestionnaire d'événements sur les éléments TD avec la classe Col2. Comme ça tu évites de mettre un "onclick" à chaque balise, de répéter le contenu du nœud et tu esquives le problème de l'apostrophe, exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8"/>
            <script>
    (function() {
        document.addEventListener('DOMContentLoaded', function() {
     
            function VoirDetailContact(val) {
                alert(val);
            }
     
            Array.filter(document.getElementsByClassName('Col2'), function(elt) {
                return elt.nodeName == 'TD';
            })
            .forEach(function(elt) {
                elt.addEventListener('click', function() {
                    VoirDetailContact(this.innerText);
                }, false);
            });
        }, false);
    })();
            </script>
        </head>
        <body>
            <table>
                <tr>
                    <td></td>
                    <td class="Col2">Micheline Goudard POUGNE-HERISSON</td>
                </tr>
                <tr>
                    <td></td>
                    <td class="Col2">René Grosjean LES-RIVIERES-D'ANAIS</td>
                </tr>
            </table>
        </body>
    </html>
    D'ailleurs tu pourrais alléger encore en virant la classe Col2 et en ciblant le deuxième élément TD de chaque TR (la colonne 2 en quelque sorte).

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/01/2015, 10h50
  2. [Batch] Accent et apostrophe dans une variable
    Par BeN0o8 dans le forum Scripts/Batch
    Réponses: 11
    Dernier message: 13/02/2014, 13h20
  3. [Fonction]récuperer dans une variable le résultat d'une requete
    Par nejisama8 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 28/04/2007, 12h34
  4. Réponses: 18
    Dernier message: 27/10/2006, 14h15
  5. Réponses: 2
    Dernier message: 24/08/2006, 10h46

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