搜索条件的白名单

时间:2010-11-05 16:55:53

标签: whitelist

我正在网站上实施简单搜索,现在我正在努力清理输入。我的计划是制作允许角色的白名单。我正在使用PHP,到目前为止我已经得到了当前的正则表达式:

preg_replace('/[^a-z0-9 -]/i', '', $s);

所以,我删除的不是字母数字或空格或连字符。

对于这种事情,是否存在普遍接受的白名单,还是仅仅依赖于应用程序?我将搜索书名,作者姓名和书籍模糊。

3 个答案:

答案 0 :(得分:2)

2010 (A space odyssey)怎么样? Giscard d`Estaing的自传怎么样? ......这通常无法回答,这取决于您的应用程序和数据结构。

您希望查看所选数据库的全文搜索功能,甚至是Sphinx等专业搜索设备。

明确您将首先使用什么引擎来实际执行搜索,并且您需要删除的内容的规则将变得更加清晰。

答案 1 :(得分:0)

Google有一些非常先进的搜索规则,但他们的基本规则是:

  

通常,忽略标点符号,包括@#$%^& *()= + [] \和其他特殊字符。

但是,Google会对常见搜索字词进行例外处理,例如C ++,C#或100美元。

如果您希望搜索功能与Google一样复杂,则可以针对上述标点符号制定规则,并有一些例外情况。但是,对于简单搜索,只需忽略Google通常忽略的字符。

答案 2 :(得分:0)

没有通用的正则表达式来解决这个问题。您的代码会删除许多您可能想要保留的内容,例如逗号,感叹号,(半)冒号和非英文字母。如果您有数据库中所有标题的完整列表,则应该能够编写一个脚本,该脚本将构建所有标题中找到的所有字符的列表。如果你的正则表达式删除了任何这些字符,那么你就有可能遇到问题(虽然通过这个测试并不意味着不会遇到问题)。

根据搜索其余部分的实现方式,您可以删除有效字符并仍然返回相关搜索结果。在这种情况下,您希望表达式允许非英语字符(因为您不想拆分单词),但您可能能够删除不在引号分隔短语内的所有标点符号。例如,搜索red haired应该会为您提供搜索red-haired加上一些额外费用后获得的所有结果。