問題場景:今天在測試自己手上的頁面功能時,發現一個小bug,在用ajax向后台發數據時,只要參數中出現一些特殊字符,控制台會報錯http 400的問題,其實就是特殊字符服務器不能解析。好了,問題是找到了,但是改如何解決勒!
首先想到的就是把特殊字符進行編碼在傳遞,但是自己寫檢測特殊字符函數代碼時發現,這要檢測的特殊字符數不勝數,完全正則不過來。
上網搜了一下,發現有一個現成的方法:encodeURIComponent();放在代碼上跑一下,任務解決了!哈哈。問題解決了,但是還是要看看其中的更深的原理!
特殊符號由前台傳入時如果沒有進行轉碼處理的,是這樣:my param is 7% and 6%7,異常顯示是[my para is 7is%207%%20and%206%7],所以就出錯了,
下面是一些常見字符列表
url特殊符號 在url中實際含義 轉碼后的十六進制表示
符號 | 含義 | 編碼 |
+ | +號表示空格 | %2B |
空格 | 用+號或者編碼 | %20 |
/ | 分隔目錄和子目錄 | %2F |
? | 分隔實際的 URL 和參數 | %3F |
% | 指定特殊字符 | %25 |
# | 表示書簽 | %23 |
& | 參數間的分隔符 | %26 |
= | URL 中指定參數的值 | %3D |
解決方案其實都是類似的,這個看自己的習慣。
方案一:var str= para.replace(/%/g,"%25");//g代表全局匹配替換
方案二:encodeURIComponent(str); //使用改方法自動轉碼。
存疑問方案:網上有說用json格式的參數就能解決,但是自己本身就是用的json格式的,但是出現這類問題!所以存疑問!