iOS中URL的编码与解码

/ 0评 / 0

一、为何要编码

    在程序中,访问一些网络资源或服务时,如果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];
}

评论已关闭。