fix: l'optimisation du collecteur empêchait de retrouver les balises avec une casse mixte

Par défaut le collecteur de balises html cherche la version minuscule uniquement (<ul) si il detecte que le document de contient aucune version de la balise en majuscule (<UL). Malheureusement si on utilise le collecteur pour parser du XML avec des balises à casse mixte (<Titre), ça ne trouve rien du tout.

On corrige en considérant que si la balises cherchée passée en argument n'est pas déjà en minuscules, alors il ne faut pas optimiser la recherche, pour être certain de trouver les balises dans toutes leurs formes. Dans le cas d'une balise passée directement en minuscules, on garde l'heuristique existante (recherche optimisée si pas de version majuscule de la balise dans le document).

A noter :

On voit donc que faire un strpos avant (et donc en plus) d'un preg_match a du sens vu la différence de perf, mais c'est beaucoup moins vrai pour le stripos

  • Enfin, en toute rigueur le collecteur est fait pour parser du HTML et pas du XML, pour lequel PHP propose des outils plus complet comme simplexml https://www.php.net/manual/fr/book.simplexml.php mais le collecteur est utilisé par le fonction extraire_balises() qui fonctionnait historiquement bien sur du XML et donc on essaye de pas casser toutes les compatibilités de code

La PR contient aussi une petite optimisation perf sur le collecteur en évitant de répéter le test sur le str_contains inutilement (il n'a de sens qu'une fois, au départ)

Le fix est à reporter en SPIP 4.4 qui a, en l'état, cassé le comportement de extraire_balises()

Rapports de requête de fusion

Chargement en cours