recherche et warning preg incorrecte
inc_recherche_to_array_dist appelle expression_recherche pour déterminer la méthode à employer : REGEXP ou LIKE. En particulier, c'est LIKE lorsque preg_match provoque une erreur. La méthode choisie est bien utilisée pour le sql_select principal https://git.spip.net/spip/spip/src/branch/master/ecrire/inc/recherche_to_array.php#L92 mais elle n'est pas testée par la suite, pour le calcul du score notamment où un preg_match ou preg_match_all sont systématiquement faits : https://git.spip.net/spip/spip/src/branch/master/ecrire/inc/recherche_to_array.php#L119
De ce fait, le preg_match_all rencontre parfois une erreur de regexp mal formée, renvoie false
et génère un warning :
PHP Warning: preg_match_all(): Compilation failed: nothing to repeat at offset 0 in /srv/data/web/vhosts/www.ndd.ext/htdocs/ecrire/inc/recherche_to_array.php on line 120
Il serait possible
- d'ajouter ` avant preg_match et preg_match_all
- peut être de conditionner le passage par ce code au fait que la méthode soit REGEXP : ajouter un
" and ($methode == "REGEXP') "
dans le test avant mais alors faudrait il compléter ce code par une version pour les cas$methode==LIKE
?
Dans mon cas ça se passe lorsqu'il y a un caractère accentué en 1er caractère, car à cette étape il a été remplacé par un '?'
C'est une boucle <pre><BOUCLE_result_comments(FORUMS){par points}{inverse}{0,10}{si #GET{recherche_len}|>{3}}{recherche}></pre>
et la pile montre que ça a appelé inc_prepare_recherche_dist(éolien...)
puis recherche_en_base(éolien...)
puis inc_recherche_to_array_dist(éolien...)
et ça échoue dans le preg_match_all
avec recherche='éolien' methode='LIKE', q=''%%'', preg='/?olien/UimsSu'