在近期的項目開發(fā)中遇到一個問題,在數(shù)據(jù)進行加密后,有些字符串加密后會含有“+”號,在服務(wù)器端接收到為空格;
在網(wǎng)上查了很多資料,大體方案有以下幾種:
1、修改客戶端
將參數(shù)中的“+”全部替換為?“%2B”;
但是我這邊測試后服務(wù)器收到的就是“%2B”,惆悵~~~
2、服務(wù)器端將空格替換為“+”,但是這種方式只適用于參數(shù)中有?“+”沒有空格的情況,不敢嘗試;
或者服務(wù)器端將“%2B”全部替換為“+”,同樣不想選擇這種方式;
3、使用stringByAddingPercentEncodingWithAllowedCharacters方法對特殊字符轉(zhuǎn)義
NSString*charactersToEscape?=@"?!@#$^&%*+,:;='\"`<>()[]{}/\\|?";
NSCharacterSet*allowedCharacters?=?[[NSCharacterSetcharacterSetWithCharactersInString:charactersToEscape]invertedSet];
NSString*encodedUrl?=?[urlstringByAddingPercentEncodingWithAllowedCharacters:allowedCharacters];
使用后發(fā)現(xiàn)“+”還是變成了“%2B”,囧~~
4、最終的處理方式是將字符串轉(zhuǎn)換成16進制,服務(wù)器端再轉(zhuǎn)換回去即可,成功解決問題??????