Bonsoir,
PHP Version 5.2.14
je viens de passer la soirée sur un bug étrange. J'ai tenté d'isoler le problème dans le code épuré suivant
EDITION: j'ai remplacé le replace_callback par un replace car, après vérification, ils se trouve qu'elles se comportent exactement de la même façon (mais replace a l'avantage de ne pas attirer l'attention sur une fonction anonyme dans la résolution du problème).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <?php $texte = '[lien NumLien=1]sfds[/lien] camùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùklkkkkkkkkkkkkkkkkkkkkkjjhklllllllllllllllllllllllllllllllllllllllllllllllllll camùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùklkkkkkkkkkkkkkkkkkkkkkjjhklllllllllllllllllllllllllllllllllllllllllllllllllll camùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùklkkkkkkkkkkkkkkkkkkkkkjjhklllllllllllllllllllllllllllllllllllllllllllllllllll'; echo preg_replace('#\[lien (.*)NumLien=([0-9]+)(.*)(?: AfficheClics=([01]))?(.*)\](.*)\[/lien\]#s', 'bonjour',$texte); ?>
Si tout fonctionne on devrait voir apparaître la chaîne inintelligible sur la page. Or la page est blanche, ce qui indique que preg_replace_callback a planté, ne renvoyant pas de texte.
MAIS j'ai trouvé 4 cas dans lesquels ça fonctionne à nouveau:
- on enlève l'option s.
- on réduit le nombre de caractères en supprimant une des lignes de la chaîne.
- on enlève la première ligne, elle qui colle à l'expression régulière (y compris si on la remplace par un nombre équivalant ou supérieur de caractères.
- on enlève de l'expression régulière par exemple le paramètre '(.*)' du milieu, qui se trouve juste avant '(?: AfficheClics...', ou bien son petit frère juste avant le crochet fermant échappé.
Qu'en pensez-vous?
Partager