背景:
今天在做一個(gè)任務(wù)時(shí),用Jquery的Ajax傳遞一長(zhǎng)串字符時(shí),在后臺(tái)的驗(yàn)證一直不成功,糾結(jié)時(shí)我了(那個(gè)字符串是隨機(jī)生成的,特長(zhǎng))。查了一上午,原來(lái)是我生成的字符串中有+號(hào),而在js傳遞的時(shí)候,會(huì)理解為是連接字符用的,到了后臺(tái)就將+號(hào)自動(dòng)變?yōu)榭崭窳耍院笈_(tái)的字符串和前臺(tái)生成的已經(jīng)不一樣了。
原因:
js后自動(dòng)解析特殊字符,如+號(hào)為連接符,解析為空格,&為變量連接符,服務(wù)器端接受數(shù)據(jù)時(shí)&以后的數(shù)據(jù)不顯示等等。
解決辦法:
1、將字符放到form中,然后用js提交form表單到服務(wù)器。
2、將字符中的特殊字符替換成十六進(jìn)制的字符,一些特殊字符與十六進(jìn)制的對(duì)應(yīng)關(guān)系:
+ | 空格 | / | ? | % | & | = | # |
%2B | %20 | %2F | %3F | %25 | %26 | &3D | %23 |
str = str.replace(//+/g,"%2B"); 將+號(hào)替換為十六進(jìn)制
3、最簡(jiǎn)單的一種,使用encodeURIComponent()函數(shù)。
該方法不會(huì)對(duì) ASCII 字母和數(shù)字進(jìn)行編碼,也不會(huì)對(duì)這些 ASCII 標(biāo)點(diǎn)符號(hào)進(jìn)行編碼: - _ . ! ~ * ' ( ) 。
其他字符(比如 :;/?:@&=+$,# 這些用于分隔 URI 組件的標(biāo)點(diǎn)符號(hào)),都是由一個(gè)或多個(gè)十六進(jìn)制的轉(zhuǎn)義序列替換的。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注