WEB前端傳參問題



    公司要搞個文檔管理系統,想想沒必要自己寫,就在網上找了一個基於AMP的 開源軟件 OPENDOCMAN 。部署倒也很順利,就在是通過部門查詢文檔的時候,出現了無法根據中文搜索的問題。
     開啟MYSQL日志后,發現查詢語句中的查詢條件為
SELECT *  FROM D  where  name  LIKE   '%u751F%u4EA7%u90E8' )。對 '%u751F%u4EA7%u90E8'  解碼就是自己的查詢條件:“生產部”。分析屬於字符集問題,於是百度mysql字符集問題,把數據庫字符集都改成UTF-8,仍然不行。突然想到查詢語句本身就不對,當然怎么改數據庫也沒用了。於是變換思路在服務端對這個字符串進行解碼成自己需要的查詢條件,繼續百度,加解碼函數,還是不行,甚至想過在數據庫端進行解碼,也沒成功。
       上網再查,發現中文傳參需要編碼是很正常的,但是一般情況下編碼出來都不會是%U這種格式的,而是
%E6%82%A8這樣的格式,是瀏覽器 根據頁面頭中規定的格式來進行編碼, 要么是GBK,要么是UTF-8,再翻翻源代碼,發現頁面中指定字符集為utf-8,那很明顯 %u751F%u4EA7%u90E8不是瀏覽器編碼得來的,而是通過代碼中通過編碼函數得來的。順着線索找,終於在源代碼中找到了提交請求的JS代碼,其中用了escape函數來編碼查詢條件,直接刪除escape,讓瀏覽器自動編碼,再試中文查詢,這下整個世界安靜了。

關於escape和頁面參數編碼更詳細可以看這篇文章,講得非常細致
http://www.haorooms.com/post/js_escape_encodeURIComponent

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com