一、为何要编码
在程序中,访问一些网络资源或服务时,如果url中存在中文或者特殊字符时,会导致无法正常的访问到资源或服务,想要解决这个问题,需要对url进行编码。
网络标准RFC 1738规定url中只能包含英文字母和阿拉伯数字,以及一些特殊字符:“只有字母和数字[0-9a-zA-Z]、和特殊符号”$-_.+!*’(),”[不包括双引号]、及某些保留字,才可以不经过编码直接用于URL。”
此时如果url中包含如汉字或者其他特殊字符则需要对它进行编码,编码的意义在于,假如url的参数中的中文或特殊字符在发送到服务端时,服务端无法解析它的真正意义,会导致服务端不能理解客户端的请求。
二、iOS中的实现
首先介绍的是url的编码
/**
url编码
@param url 对url进行编码
@return 编码后的url
*/
+ (NSString *)urlEncode:(NSString *)url{
NSCharacterSet *encodeUrlSet = [NSCharacterSet URLQueryAllowedCharacterSet];
return [url stringByAddingPercentEncodingWithAllowedCharacters:encodeUrlSet];
}
stringByAddingPercentEncodingWithAllowedCharacters接收NSCharacterSet对象,几种常用的NSCharacterSet:
URLFragmentAllowedCharacterSet "#%<>[\]^`{|} / /返回一个包含字符的字符集允许URL的片段组件。
URLHostAllowedCharacterSet "#%/<>?@\^`{|} / /返回一个包含字符的字符集允许URL的子组件。
URLPasswordAllowedCharacterSet "#%/:<>?@[\]^`{|} / /返回一个包含字符的字符集允许在一个URL的密码子组件。
URLPathAllowedCharacterSet "#%;<>?[\]^`{|} / /返回一个包含字符的字符集允许URL的路径组件。字符“;”是一种合法的路径,但是建议最好是percent-encoded兼容NSURL(-stringByAddingPercentEncodingWithAllowedCharacters:percent-encode任何‘;’字符如果你通过URLPathAllowedCharacterSet)。
URLQueryAllowedCharacterSet "#%<>[\]^`{|} / /返回一个包含字符的字符集允许一个URL的查询组件。
URLUserAllowedCharacterSet "#%/:<>?@[\]^` / /返回一个包含字符的字符集允许在一个URL的用户子组件。
下面是url的解码,解码比较简单
/**
url解码
@param url 对url进行解码
@return 解码后的url
*/
+ (NSString *)urlDecode:(NSString *)url{
return [url stringByRemovingPercentEncoding];
}