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 :

Fonction mb_substr() sur une variable contenant un $ [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Par défaut Fonction mb_substr() sur une variable contenant un $
    Bonjour à tous,

    Je reçois des infos d'une BDD.
    Une des champs que je reçois peut contenir des '$'.
    Par exemple:
    '$TFKA1'
    Je souhaite faire divers tests sur cette chaine, j'ai donc cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $rest = mb_substr($var, 1, 3, 'UTF-8');
    Je souhaite en effet récupérer les caractères 2, 3 et 4 pour vérifier qu'ils sont dans une liste de données "bannies".
    (dans cet exemple, ce serait pour savoir si 'TFK' est présent dans cette liste de données bannies)
    Mais apparemment, le '$' le gêne car le résultat retourné n'est pas bon.

    Comment feriez vous pour que le $ ne soit pas interprété (sachant que mettre un '\' parait difficile car tous les champs ne commencent pas par '$'.

    Est-ce que passer par des regex serait une solution? (j'ai regardé mais ça m'a été complexe de comprendre)
    Les regex me permettraient elles de ne pas interpréter ce '$'?

    Merci de votre aide,
    Benjamin.

  2. #2
    Membre Expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Ce code marche chez moi parfaitement bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $var = '$TFKA1';
    $rest = mb_substr($var, 1, 3, 'UTF-8');
    echo $rest;
    Tu as bien entouré ta variable de guillemets simple, pas double ? Car sinon la chaîne est en effet interprêté, et remplacer par le nom de variable (qui n'existe pas ) et qui renvoie donc un résultat vide.

  3. #3
    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
    Je crois que le problème est plutôt que seulement certains champs commencent par $ et que Super_carotte souhaite que sa vérification fonctionne qu'il ait ou non un $ au début.
    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]

  4. #4
    Membre Expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    J'ai peut-être pas très bien compris dans ce cas là...

    Après si les '$' le gène, il suffit de les virer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $rest = mb_substr(str_replace('$','',$var), 1, 3, 'UTF-8');

  5. #5
    Membre confirmé
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Par défaut
    Bonjour et merci pour vos réponses.

    Je ne peux pas mettre de guillemets car ma variable vient directement d'une BDD. c’était pour l'exemple que j’avais écrit $var = '$TFKA1';.
    Dans mon code, ça ressemble plutôt à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $test5 = substr($tab_value['r_job'], 1, 3, 'UTF-8');
    (la valeur vient de la colonne nommée 'r_job')

    Et en effet, je peux avoir des $ comme d'autre signes en début de chaine.
    exemple:
    $CYTWA
    £PACCF
    AEXTOG
    PORTOD

  6. #6
    Membre Expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Dans ce cas là, supprime tous les caractères non alpha numérique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $rest = preg_replace("/\W/", '', $var);

  7. #7
    Membre confirmé
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Par défaut
    Mais je peux avoir des caractères spéciaux au milieu de ma chaine.

    du coup, si je souhaite bannir les chaines contenant "TFK" et que la chaine de départ est:
    ETF$KT

    si je prend la méthode de supprimer les caracteres spéciaux, cette chaine sera considéré comme a bannir alors qu'elle ne le devrait pas.

    N'y a t'il pas de solutions pour faire comprendre à PHP que si il y a des '$' dans mes noms de variable, il ne doit pas les interpréter?

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 22/01/2014, 19h30
  2. Fonction index ou find sur une variable multiple
    Par mohamed_ dans le forum SAS Base
    Réponses: 5
    Dernier message: 22/02/2013, 18h02
  3. agir sur une variable en fonction du choix du menu
    Par Alegreg dans le forum ASP.NET
    Réponses: 3
    Dernier message: 27/04/2011, 21h51
  4. Réponses: 3
    Dernier message: 22/09/2009, 21h34
  5. Réponses: 2
    Dernier message: 18/06/2007, 15h29

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