NSString * test = (NSString *) CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)validUrl,
NULL,
(CFStringRef)@";/?:@&=$+{}<>,",
kCFStringEncodingUTF8);
更新
嗨@Rendy。对不起昨天的快速回复。在跳下之前,我只有时间经过一个 1 班轮,并希望这足以让您纠正您遇到的问题。
您总是希望对 URL 的参数进行编码。如果您的 URL 是另一个 URL 的参数或嵌入在某些 XML 中;您需要对整个 url 进行编码(这意味着参数会被双重编码 - 因为您采用“有效” URL 并将其转义,因此它成为另一个 URL 中的有效参数(即,:
并被&
转义,因此参数不会混合在一起。)
如果您愿意,您可以在下面的字符串中添加额外的字符,它们将被百分比编码值替换。我相信下面的字符串已经涵盖了无效值。
这是一个类别NSString
:
@implementation NSString (encode)
+ (NSString*)stringEncodedAsUrlParameter:(NSString *)string
{
NSString *newString = NSMakeCollectable(
[(NSString *)CFURLCreateStringByAddingPercentEscapes(
kCFAllocatorDefault,
(CFStringRef)string,
NULL, /* charactersToLeaveUnescaped */
CFSTR(":/?#[]@!$ &'()*+,;=\"<>%{}|\\^~`"),
kCFStringEncodingUTF8
) autorelease]
);
if (newString) {
return newString;
}
return @"";
}
- (NSString*)stringByEncodingAsUrlParameter
{
return [NSString stringEncodedAsUrlParameter:self];
}
@end
像这样称呼它:
NSString * escapedParameters = [NSString stringEncodedAsUrlParameter:unescapedParameters];
或者:
NSString * escapedParameters = [unescapedParameters stringByEncodingAsUrlParameter];
然后将正确转义的参数添加到 URL 的末尾。如果您对整个 URL 进行编码,您将对“http://”部分进行编码,但它不起作用。
我最初从 ASIHttpRequest 复制了以上内容,但添加的任何错误都是我的。
希望有帮助!祝你好运!!