今天下午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”正好滿足這個條件,于是被搜索出了。