带有特殊字符的MYSQL全文搜索问题

时间:2018-12-22 20:01:25

标签: php mysql boolean escaping full-text-search

我正在BOOLEAN模式下用PHP进行全文搜索,这种方式有95%的时间在工作。但是,当我输入“”这样的特殊字符时,查询将失败。

有问题的表包含约6,000条记录,其中大量是商业级紧固件。

示例数据:

  

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 \\”。我怀疑这是问题所在。

我真的不确定clean函数的哪一部分导致了此问题,我认为通过将ENT_NOQUOTES添加到htmlspecialchars可以解决它,但是还没有解决。

0 个答案:

没有答案