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 :

Différence de casse suivant le serveur


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 18
    Par défaut Différence de casse suivant le serveur
    Bonjour tous.
    J'ai une application qui cherche des termes entrés par les visiteurs dans des lignes de textes et il m'arrive un truc dingue Exclamation


    Il y a eu un changement de serveur chez mon hébergeur pour PHP 5.2.8/linux.
    Depuis j'ai un problème qui a l'air d'être spécifique de la lettre "E" sur ce serveur et pas en local (PHP 5.2.0/win XP) Exclamation

    Voilà ma bidouille de départ :
    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
     
    $phrase = 'Aaron prit pour femme Élischéba, fille d\'Amminadab, soeur de Nachschon; et elle lui enfanta Nadab, Abihu, Éléazar et Ithamar.';
    $mot = 'Eléazar';
     
    $a = txt2reg($mot, 0, 0); // transfo du mot à chercher en expression régulière
    $get = get($a, $phrase, 'tt'); // marquage des termes dans la phrase à scanner
    echo $mot.' -> '.$a.' =>> '.$get; // écriture du résultat
     
    function txt2reg($word, $casse, $mot_cplt){
     $word = str_replace('/', '', $word);
     $word = str_replace('\\', '', $word);
     $search = array ("'[AÀÁÂÃÄ]'", "'[CÇ]'", "'[EÈÉÊË]'", "'[IÌÍÎÏ]'", "'[NÑ]'", "'[OÒÓÔÕÖ]'", "'[UÙÚÛÜ]'", "'[aàáâãä]'", "'[cç]'", "'[eèéêë]'", "'[iìíîï]'", "'[nñ]'", "'[oòóôõö]'", "'[uùúûü]'");
     $replace = array ('[AÀÁÂÃÄ]', '[CÇ]', '[EÈÉÊË]', '[IÌÍÎÏ]', '[NÑ]', '[OÒÓÔÕÖ]', '[UÙÚÛÜ]', '[aàáâãä]', '[cç]', '[eèéêë]', '[iìíîï]', '[nñ]', '[oòóôõö]', '[uùúûü]');
     $txt = preg_replace ($search, $replace, $word);
     $txt = "($txt)";
     if ($mot_cplt == 1) $txt = "\b$txt\b";
     $txt = "/$txt/";
     if ($casse != 1) $txt = $txt.'i'; 
     return $txt;
    }
     
    function get($a, $texte, $bool){ 
     $l1 = $l = strlen($texte);
     // encadrer le mot
     $texte = preg_replace($a, '<X>$1</X>', $texte); 
     $l = strlen($texte);
     // si on n'a trouvé aucun mot
     if ($l == $l1) $texte = 'rien trouvé';
     // si on a trouvé des mots, remplacer X par SPAN 
     else {
         $texte = str_replace('<X>', '<SPAN CLASS=q>', $texte);
         $texte = str_replace('</X>', '</SPAN>', $texte);
     }
     return $texte; 
    }
    si je cherche Eleazar, ELEAZAR, elEazar ou tout autre modification de casse et d'accents, ça marche très bien en local.
    Par contre dès que je change la casse d'un 'e', ça ne passe plus du tout sur le serveur PHP5.2.8 alors que ça passe très bien pour le changement de casse des autres lettres.

    Si quelqu'un a vu un tel bug ou peut tester ce petit script sur d'autres versions PHP ou OS...

    merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 325
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 325
    Billets dans le blog
    17
    Par défaut
    Hello,
    Je ne comprends pas le bug
    Peux-tu donner un exemple avec :
    - donnée avant traitement
    - résultat escompté après traitement
    - résultat obtenu après triatement

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 18
    Par défaut
    le but du script (ici incomplet) est que les visiteurs trouvent des mots dans un fichier texte. Par défaut la recherche est insensible à la casse et aux accents.
    Donc, une phrase contenant l'exemple donné "Éléazar" sera trouvée si la requête est eleazar, éléazar, eleAZAR, ÉlÉazar... ...
    Malheureusement, si le programme arrive bien à trouver cette phrase quelque soit les accents, ça bug dès que la casse est mauvaise POUR LA LETTRE 'E' uniquement !!
    Alors que la phrase est bien trouvée si la casse est mauvaise pour les autres lettres !!
    Un truc de fou
    Pour clore le tout, ce bug du 'e' n'a pas lieu sur ma machine php 5.2.0/Apache2.0/winXP mais sur le serveur de mon hébergeur php 5.2.8/Apache2.0/linux, peut-être depuis une mise à jour.

    Voilà si ça permet de comprendre.
    Je ne sais donc pas si c'est un bug du côté des expression régulières de PHP ou une autre hypothèse.
    Mais il faut que je trouve une explication, si ce n'est une solution ! En attendant, toute requête avec un E peut se solder par un faux résultat.

Discussions similaires

  1. Différence de comportement suivant le serveur du même EAR
    Par Annsen dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 12/08/2011, 11h50
  2. [Wamp] Différence .htm et .php entre serveur et easyphp
    Par filopat31 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 15
    Dernier message: 26/03/2008, 16h47
  3. requete select sans resultat suivant le serveur
    Par marielbg13 dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/11/2007, 21h24
  4. Quelle Différence entre MyQql et sql serveur
    Par nina_2006 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 29/10/2006, 21h57
  5. Traitement des dates différent suivant le serveur
    Par le lynx dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/09/2005, 11h14

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