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