Solo le parole e gli operatori hanno significato nella modalità di ricerca booleana. Gli operatori sono:+
, -
, > <
, ( )
, ~
, *
, "
, @distance
. Dopo alcune ricerche ho trovato quali sono i caratteri delle parole:maiuscole, minuscole, numerici (cifra) e _
. Penso che tu possa usare uno dei due approcci:
-
Sostituisci tutti i caratteri non verbali con spazi (preferisco questo approccio). Questo può essere ottenuto con regex:
$search = preg_replace('/[^\p{L}\p{N}_]+/u', ' ', $keyword);
-
Sostituisci caratteri-operatori con spazi:
$search = preg_replace('/[+\-><\(\)~*\"@]+/', ' ', $keyword);
Solo le parole sono indicizzate dal motore di ricerca full-text e possono essere ricercate. I caratteri non verbali non sono indicizzati, quindi non ha senso lasciarli nella stringa di ricerca.
Riferimenti:
- Ricerche booleane full-text
- Ottimizzazione della ricerca full-text di MySQL (vedi:"Modifiche ai set di caratteri")
- PHP:preg_replace
- PHP:proprietà dei caratteri Unicode
- PHP:possibili modificatori nei modelli regex