Я выполняю полнотекстовый поиск в PHP в режиме BOOLEAN, который работает 95% времени.Однако, когда я ввожу специальный символ, такой как ", запрос не выполняется.
В рассматриваемой таблице содержится около 6000 записей, причем большое количество составляет крепежные детали коммерческого класса.
Пример данных:
7/16 "UNF x 2 1/4" Hex
Перед выполнением запроса вход очищается с использованием следующей функции
function clean($db, $str) {
$str = @trim($str);
if(get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
$str = htmlspecialchars($str, ENT_NOQUOTES);
$str = preg_replace("/[[:blank:]]+/"," ",$str);
return mysqli_real_escape_string($db, $str);
}
При поиске 7/16 "и ничего другого, я должен получить несколько сотен результатов, но я ничего не получаю, и я верю, что это связано с тем, как неправильно экранируется ввод.
После очистки вводаЯ добавляю + в начало каждого слова, чтобы убедиться, что оно включено в результаты.Это делается с использованием следующего:
$symbol = '+';
$string = $symbol . str_replace(' ', " $symbol", $term);
Пример запроса:
SELECT * FROM products WHERE MATCH (code, desc) AGAINST ('+7\/16\\\"' IN BOOLEAN MODE) ORDER BY desc ASC
Как видите, исходный ввод 7/16 "был изменен на +7/16 \\».Здесь я подозреваю, что проблема заключается в этом.
Я действительно не уверен, какая часть чистой функции вызывает это, я подумал, что добавление ENT_NOQUOTES в htmlspecialchars решило бы это, но это не так.