Seuls les mots et les opérateurs ont un sens en mode de recherche booléenne. Les opérateurs sont :+
, -
, > <
, ( )
, ~
, *
, "
, @distance
. Après quelques recherches, j'ai trouvé ce que sont les caractères des mots :majuscules, minuscules, chiffres (chiffre) et _
. Je pense que vous pouvez utiliser l'une des deux approches :
-
Remplacez tous les caractères non verbaux par des espaces (je préfère cette approche). Cela peut être accompli avec regex :
$search = preg_replace('/[^\p{L}\p{N}_]+/u', ' ', $keyword);
-
Remplacez les opérateurs-caractères par des espaces :
$search = preg_replace('/[+\-><\(\)~*\"@]+/', ' ', $keyword);
Seuls les mots sont indexés par le moteur de recherche plein texte et peuvent être recherchés. Les caractères non verbaux ne sont pas indexés, il n'est donc pas logique de les laisser dans la chaîne de recherche.
Références :
- Recherches booléennes en texte intégral
- Ajustement de la recherche en texte intégral MySQL (voir :"Modifications du jeu de caractères")
- PHP :preg_replace
- PHP :propriétés des caractères Unicode
- PHP :Modificateurs possibles dans les modèles regex