我通过在sql替换空格中使用LIKE语句来获取我在数据库中搜索的查询。
$in= str_replace(' ','%',$in);
example : 'harry potter is a great book' becomes 'harry%potter%is%a%great%book'
现在我希望通过允许用户使用谷歌这样的引号来优化我的搜索
' "harry potter" is a great book' become 'harry potter%is%a%great%book'
我想跳过引号内的空格,查询也可以包含多对引号。
' "harry potter" is a "great book"' become 'harry potter%is%a%great book'
答案 0 :(得分:1)
这是一种快速而肮脏的方法:
$str = '"harry potter" is a "great book"';
// get all matches between quotes
preg_match_all('/".*?"/', $str, $matches);
// do your normal replacement, and remove quotes
$str = str_replace(' ', '%', $str);
$str = str_replace('"', '', $str);
// undo quoted replacements
foreach ($matches[0] as $value) {
$value = trim($value, '"');
$str = str_replace(str_replace(' ', '%', $value), $value, $str);
}
echo $str;
这将出局:
harry potter%is%a%great book
然而,这远非完美。例如,如果相同的短语出现不止一次,无论是引用还是未引用,那么它都不会为您提供您期望的结果。还有其他方法可以解决这个问题,但这只会增加复杂性。
正如Devon在评论中提到的,你应该考虑使用full-text search。