? ? ? 由于url支持26個英文字母、數字和少數幾個特殊字符,因此,對于url中包含非標準url的字符時,就需要對其進行編碼。iOS中提供了函數stringByAddingPercentEscapesUsingEncoding對中文和一些特殊字符進行編碼,但是stringByAddingPercentEscapesUsingEncoding的功能并不完善,對一些較為特殊的字符無效。
較為特殊的字符例如:!*'();:@&=+$,/?%#[]
我們需要對含有這些字符的部分進行處理:
比如請求"http://m.xxx.com/login.action?username=liyong&psw=&123&time=20120723"這樣的url請求時,其中的密碼部分因為包含特殊字符“&123”,所以會被url認為是分割參數的標志,參數會被錯誤的分割如下:
username=liyong,psw=空,123=空,time=20120723
解決辦法:
因此,如果想正確的傳遞帶有特殊字符的密碼,需要對密碼做如下處理:
password = (NSString*)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL,(CFStringRef) password,NULL,(CFStringRef)@"!*'();:@&=+$,/?%#[]",kCFStringEncodingUTF8));
注意:這樣的encoding只能對params的內容,不要對整個url這樣做。
這個時候密碼就是“&123”了,因為“&”被轉譯成了“&”,這樣就可以傳遞帶特殊字符的密碼了。
可以抽去出來當成一個公共的方法,NSString * encodeURLParam(NSString* paramString ){}
參考鏈接:http://www.cnblogs.com/spiderdzl/p/5179331.html