gros bug ave expression régulière ??

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : gros bug ave expression régulière ??

gros bug ave expression régulière ??

par pierrickg » 12 avr. 2009, 22:13

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 :!:


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) :!:

Voilà ma bidouille de départ :
$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.