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 :

problème avec preg_match


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2003
    Messages : 382
    Points : 161
    Points
    161
    Par défaut problème avec preg_match
    Bonjour,

    J'ai un problème avec le code ci-dessous. Je teste avec cette url

    mozilla/5.0 (windows nt 6.1; wow64; rv:43.0) gecko/20100101 firefox/43.0

    or le script me détecte "mozi" alors que je souhaite avoir une détection sur le mot complet (en clair je voudrais une détection si j'ai "mozilla" dans le tableau)

    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
     
    $UA=$_SERVER["HTTP_USER_AGENT"];
    $brow = strtolower($UA);
     
    $bots = array (
    "zeus.*webster",
    "zeus",
    "zyborg",
    "mozi",
    "voyager"
    ); 
     
    $aspirateur="vide"
     
    for($i=0;$i<count($bots);$i++)
    {
    if(preg_match("#$bots[$i]#",$brow)) $aspirateur="aspiOK";
    }
    echo $aspirateur;
    75 ans quelques dents en moins, mais toujours envie d'apprendre

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je ne comprends pas bien : si tu ne veux pas obtenir "mozi" pourquoi tu mets "mozi" et pas "mozilla" ?

    Au passage tu n'as pas besoin d'une expression regulière et utilise les boucle foreach :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach ($bots as $bot) {
    {
       if(strpos($brow, $bpt) !== FALSE) $aspirateur="aspiOK";
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre habitué
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2003
    Messages : 382
    Points : 161
    Points
    161
    Par défaut
    Bonjour,

    Ok je vais utiliser "foreach ".

    Je me suis surement mal expliqué, je veux virer du site les aspirateurs
    par exemple dans cette chaine, que je passe en minuscule avant de la traiter, index.php HTTP/1.0" 200 7080 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)

    je veux repérer la chaine mj12bot qui fait partie du tableau pour diriger le visiteur vers une page neutre.

    J'ai testé la boucle que tu me propose mais ça ne marche pas

    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
     
    $bots = array (
    "library",
    "libwww-perl",
    "linkchecker",
    "lwp-trivial",
    "microsoft control",
    "minibot(naverrobot)",
    "mj12bot",
    "msiecrawler",
    "msnbot-media",
    "xenu link sleuth",
    "yacy",
    "yandex",
    "zeus.*webster",
    "zeus",
    "zyborg",
    "voyager"
    ); 
     
    $brow=strtolower('index.php HTTP/1.0" 200 7080 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)"');
    echo $brow; echo'<br>';
    $aspirateur="vide";
     
    foreach ($bots as $bot) 
    {
       if(strpos($brow, $bot) !== FALSE) $aspirateur="aspiOK";
    }
    echo $aspirateur;
    le problème c'est que si je met "mj12" dans mon tableau (à la place de mj12bot) le résultat est vrai, et j'ai peur de virer de braves gens qui ne sont pas des aspirateurs

    Merci
    75 ans quelques dents en moins, mais toujours envie d'apprendre

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Encore une fois pourquoi voudrais-tu mettre "mj12" si c'est "mj12bot" que tu veux ?

    Le code que tu nous montres détecte bien "mj12bot" et retourne "aspiok".
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre habitué
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2003
    Messages : 382
    Points : 161
    Points
    161
    Par défaut
    Simplement si un jour il y a une url avec "mj12" je ne veux pas la virer
    75 ans quelques dents en moins, mais toujours envie d'apprendre

  6. #6
    Membre habitué
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2003
    Messages : 382
    Points : 161
    Points
    161
    Par défaut
    Le code détecte aussi "mj12" !!
    75 ans quelques dents en moins, mais toujours envie d'apprendre

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu te trompes dans tes tests.
    "mj12bot" renvoit "aspiok"
    "mj12" renvoit "vide"
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre habitué
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2003
    Messages : 382
    Points : 161
    Points
    161
    Par défaut
    Désolé d'insister mais chez moi ça donne "aspiOK"
    J'ai modifié le nom de la variable pour être sur que cette variable n'est pas utilisée ailleurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $aspira="vide";
     
    foreach ($bots as $bot) 
    {
       if(strpos($brow, $bot) !== FALSE) $aspira="aspiOK";
    }
    echo $aspira;
    Nom : image.jpg
Affichages : 52
Taille : 39,8 Ko
    75 ans quelques dents en moins, mais toujours envie d'apprendre

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu devrais prendre le temps de relire tes messages, mes messages et ce que fais ton code car tu as le même résultat que moi et c'est bien ce qu'on veut :
    "mj12bot" est bien intercepté et tu obtiens donc "aspiok".
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre habitué
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2003
    Messages : 382
    Points : 161
    Points
    161
    Par défaut
    Oui, tu as raison, en fait je pense que les résultats que j'avais étaient dû au cache de mon navigateur.
    Je l'ai vidé et tout est bon.
    Merci à toi et désolé d'avoir bêtement insisté
    75 ans quelques dents en moins, mais toujours envie d'apprendre

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

Discussions similaires

  1. Problème avec fonction preg_match
    Par lebanner82 dans le forum Langage
    Réponses: 5
    Dernier message: 23/03/2012, 04h08
  2. [RegEx] problème avec preg_match()
    Par samuel4256 dans le forum Langage
    Réponses: 11
    Dernier message: 24/10/2010, 15h20
  3. [RegEx] problème avec preg_match
    Par thewaterkidny dans le forum Langage
    Réponses: 3
    Dernier message: 24/04/2008, 16h57
  4. [RegEx] problème avec preg_match
    Par othmane126 dans le forum Langage
    Réponses: 1
    Dernier message: 15/10/2007, 15h04
  5. Réponses: 23
    Dernier message: 24/05/2007, 10h32

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