MYSQL Проблема полнотекстового поиска со специальными символами - PullRequest
0 голосов
/ 22 декабря 2018

Я выполняю полнотекстовый поиск в 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 решило бы это, но это не так.

...