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