今天下午QA給我報(bào)了一個bug,說輸入“f+f”或者“f_f”能夠搜索出“f f”的結(jié)果。看著這bug的描述,心里還想著怎么會呢,模糊查詢也不會出現(xiàn)這樣的結(jié)果啊!趕緊自己輸入“f+f”和“f_f”驗(yàn)證下,結(jié)果兩次都輸出了“f f”。由于查詢的條件是通過URL后的參數(shù)輸入的,當(dāng)我輸入“f+f”時(shí),發(fā)現(xiàn)參數(shù)傳入到服務(wù)端后變成了“f f”了,如果是這樣,那search的結(jié)果是正確的。但為什么輸入的參數(shù)“f+f”怎么會變成了“f f”呢?而且在輸入?yún)?shù)都通過escape進(jìn)行編碼了。于是上網(wǎng)google了一下,發(fā)現(xiàn)escape函數(shù)是不會對“+”進(jìn)行編碼的,但請求時(shí),web服務(wù)器會過濾掉“+”這個字符。所以我們必須手工對“+”進(jìn)行編碼,把所有的“+”都改變?yōu)?#8220;%2b”。修改代碼測試,再次輸入“f+f”,結(jié)果不能搜索出“f f”的結(jié)果了。
而對輸入“f_f”搜索出“f f”的結(jié)果,主要原因是這個是模糊查詢的一種。“f_f”表示搜索出含有兩個“f”字符而且中間有一個字符分隔的,“f f”正好滿足這個條件,于是被搜索出了。
而對輸入“f_f”搜索出“f f”的結(jié)果,主要原因是這個是模糊查詢的一種。“f_f”表示搜索出含有兩個“f”字符而且中間有一個字符分隔的,“f f”正好滿足這個條件,于是被搜索出了。