NSURL:使用NSCharacterSet

时间:2016-07-23 08:54:32

标签: objective-c nsstring ios9 nsurl backslash

这可能是一个重复的问题,但我已经全面检查过,无法找到iOS9的工作答案。 -stringByAddingPercentEscapesUsingEncoding已被弃用。我需要使用-stringByAddingPercentEncodingWithAllowedCharacters

下面是需要反斜杠转义的字符串,以便API可以验证会话并返回响应。

NSString *base = @"http://domain.com/interface/?end=imember";
NSCharacterSet *set = [NSCharacterSet URLQueryAllowedCharacterSet];
NSString *key = [@"&client_key=KOB3N6KX9JXF2MRPO5U.BRFYM7TYVE\/16KIJVXZA6R7H\/1LD1K\/JYIYG7IZP2HA7NUYOVNT3CJG==&token=SGD7E9B29TQ.8HIITZ37XW3GLK5OGLZNLCDM=" stringByAddingPercentEncodingWithAllowedCharacters:set];

标准的URL字符集不会逃避反斜杠,我已经尝试了所有这些:

URLUserAllowedCharacterSet
URLPasswordAllowedCharacterSet
URLHostAllowedCharacterSet
URLPathAllowedCharacterSet
URLQueryAllowedCharacterSet
URLFragmentAllowedCharacterSet

如果有人可以提供帮助,我对发展很陌生。是否可以创建包含反斜杠的自定义允许集?

编辑:

这就是网址的样子:

http://domain.com/interface/?end=imember&client_key=KOB3N6KX9JXF2MRPO5U.BRFYM7TYVE\/16KIJVXZA6R7H\/1LD1K\/JYIYG7IZP2HA7NUYOVNT3CJG==&token=SGD7E9B29TQ.8HIITZ37XW3GLK5OGLZNLCDM=

1 个答案:

答案 0 :(得分:2)

你回答的确切解决方法如下。我是从Zaph's answer得到的。这是比其他答案更好的答案。

NSString *unescaped = @"http://domain.com/interface/?end=imember"];
NSString *escapedString = [unescaped stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]];
NSLog(@"escapedString: %@", escapedString);

URL编码字符集

URLFragmentAllowedCharacterSet  "#%<>[\]^`{|}
URLHostAllowedCharacterSet      "#%/<>?@\^`{|}
URLPasswordAllowedCharacterSet  "#%/:<>?@[\]^`{|}
URLPathAllowedCharacterSet      "#%;<>?[\]^`{|}
URLQueryAllowedCharacterSet     "#%<>[\]^`{|}
URLUserAllowedCharacterSet      "#%/:<>?@[\]^`