Endast orden och operatorerna har betydelse i booleskt sökläge. Operatörer är:+ , - , > < , ( ) , ~ , * , " , @distance . Efter lite forskning hittade jag vad ordtecken är:versaler, gemener, siffror (siffra) och _ . Jag tror att du kan använda en av två metoder:
-
Ersätt alla icke-ordstecken med mellanslag (jag föredrar detta tillvägagångssätt). Detta kan åstadkommas med regex:
$search = preg_replace('/[^\p{L}\p{N}_]+/u', ' ', $keyword); -
Byt ut teckenoperatorer med mellanslag:
$search = preg_replace('/[+\-><\(\)~*\"@]+/', ' ', $keyword);
Endast ord indexeras av fulltext sökmotor och kan sökas. Tecken som inte är ord indexeras inte, så det är inte meningsfullt att lämna dem i söksträngen.
Referenser:
- Booleska fulltextsökningar
- Finjustera MySQL fulltextsökning (se:"Teckenuppsättningsändringar")
- PHP:preg_replace
- PHP:Unicode-teckenegenskaper
- PHP:Möjliga modifierare i regexmönster