Caractères spéciaux d'expression régulière présents dans une chaîne de recherche
Bonjour,
J'ai une boucle <BOUCLE_recherche(FORUMS){recherche}{exclus}{tri points,inverse}{0,5}>
au sein de l'affichage d'un forum qui permet d'afficher les autres posts similaires; pour cela, l'argument recherche est renseigné avec le titre du forum en cours d'affichage.
Cela fonctionne bien sur la plupart des pages sauf sur un forum ayant le titre suivant: Sortie du kit compatible SPIP 3 ??
J'ai une erreur MySQL 1139:
Got error 'repetition-operator operand invalid' from regexp SELECT t.id_forum, t.titre, t.texte, t.auteur, t.email_auteur, t.nom_site, t.url_site FROM spip_forum AS t WHERE t.titre REGEXP 'Sortie du kit compatible SPIP 3 ??|Sortie|compatible|SPIP' OR ...
Ce sont les ??
qui coincent car manifestament ils sont interprétés en tant que métacaractères dans la regex, n'ayant pas été échappés.
J'ai fait un autre essai en mettant d'autres opérateurs de regex: Sortie kit[0-9]* compatib(ilité|le) SPIP 3 ??
, qui confirme ce que je pensais:
Erreur SQL 1139 Got error 'repetition-operator operand invalid' from regexp SELECT ... WHERE t.titre REGEXP 'Sortie kit[0-9]* compatib(ilite|le) SPIP 3 ??|Sortie|kit[0-9]*|compatib(ilite|le)|SPIP' OR ...
à savoir la chaîne de recherche n'est pas prétraitée, et les caractères spéciaux sont repris tels quels, d'où le plantage MySQL.
Je propose donc les corrections ci-joint pour ecrire/inc/rechercher.php
(commentaires avec pverrier
).