Php 对于类SQL语句,如何忽略非字母数字字符?
我有一个使用ajax自动完成的搜索框,它可以正常工作,但在查找内容时效率不高。我希望能够搜索某些内容,而不需要使用逗号或冒号来实际返回正确的结果Php 对于类SQL语句,如何忽略非字母数字字符?,php,sql,ajax,Php,Sql,Ajax,我有一个使用ajax自动完成的搜索框,它可以正常工作,但在查找内容时效率不高。我希望能够搜索某些内容,而不需要使用逗号或冒号来实际返回正确的结果 e、 g.如果我想要终结者2:审判日,我搜索终结者2审判日,它不会返回任何内容,因为我漏掉了冒号:。我不想发生这种事。由于它是ajax自动完成的,所以仍然可以很容易地找到它,但我希望能够在不需要非字母数字字符的情况下查找内容如果使用字符串搜索,则可以执行以下操作: where replace(replace(replace(searchbox, ':'
e、 g.如果我想要终结者2:审判日,我搜索终结者2审判日,它不会返回任何内容,因为我漏掉了冒号:。我不想发生这种事。由于它是ajax自动完成的,所以仍然可以很容易地找到它,但我希望能够在不需要非字母数字字符的情况下查找内容如果使用字符串搜索,则可以执行以下操作:
where replace(replace(replace(searchbox, ':', ''), ',', ''), '.') like
replace(replace(replace(title, ':', ''), ',', ''), '.')
如你所见,这相当麻烦。您可以通过在数据库中存储标题的“可搜索”版本而不使用标点符号,然后删除用户输入的任何标点符号来简化它
或者——这可能是更好的解决方案——使用全文搜索,有文档记录。对于搜索框,这可能是您真正想要的。例如,它处理标点符号和部分匹配。对于输入
终止符2判决日
,搜索所有单词,而不是字符串:
title LIKE '%terminator%' AND title LIKE '%2%' AND title LIKE '%judgement%' AND title LIKE '%day%'
您可能想查看全文搜索。有没有更有效的方法说在非字母数字字符上断开字符串而不是在空白处?我知道我可以使用phps explode函数来拆分特定字符上的字符串,并用它生成一个数组,但是有没有一种方法可以识别字符串是否包含字符,并在不知道它是什么的情况下拆分该字符,而不知道它不是1-z或0-9
preg_split()
具有以下功能:preg_split('/[^[:alnum:]+/',$str);