背景:
今天在做一個任務時,用Jquery的Ajax傳遞一長串字符時,在后臺的驗證一直不成功,糾結時我了(那個字符串是隨機生成的,特長)。查了一上午,原來是我生成的字符串中有+號,而在js傳遞的時候,會理解為是連接字符用的,到了后臺就將+號自動變為空格了,所以后臺的字符串和前臺生成的已經不一樣了。
原因:
js后自動解析特殊字符,如+號為連接符,解析為空格,&為變量連接符,服務器端接受數據時&以后的數據不顯示等等。
解決辦法:
1、將字符放到form中,然后用js提交form表單到服務器。
2、將字符中的特殊字符替換成十六進制的字符,一些特殊字符與十六進制的對應關系:
+ | 空格 | / | ? | % | & | = | # |
%2B | %20 | %2F | %3F | %25 | %26 | &3D | %23 |
str = str.replace(//+/g,"%2B"); 將+號替換為十六進制
3、最簡單的一種,使用encodeURIComponent()函數?! ?/P>
該方法不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ' ( ) 。
其他字符(比如 :;/?:@&=+$,# 這些用于分隔 URI 組件的標點符號),都是由一個或多個十六進制的轉義序列替換的。
新聞熱點
疑難解答