今天下午QA给我报了一个bug,说输入“f+f”或者“f_f”能够搜索出“f f”的结果。看着这bug的描述,心里还想着怎么会呢,模糊查询也不会出现这样的结果啊!赶紧自己输入“f+f”和“f_f”验证下,结果两次都输出了“f f”。由于查询的条件是通过URL后的参数输入的,当我输入“f+f”时,发现参数传入到服务端后变成了“f f”了,如果是这样,那search的结果是正确的。但为什么输入的参数“f+f”怎么会变成了“f f”呢?而且在输入参数都通过escape进行编码了。于是上网google了一下,发现escape函数是不会对“+”进行编码的,但请求时,web服务器会过滤掉“+”这个字符。所以我们必须手工对“+”进行编码,把所有的“+”都改变为“%2b”。修改代码测试,再次输入“f+f”,结果不能搜索出“f f”的结果了。
而对输入“f_f”搜索出“f f”的结果,主要原因是这个是模糊查询的一种。“f_f”表示搜索出含有两个“f”字符而且中间有一个字符分隔的,“f f”正好满足这个条件,于是被搜索出了。