【问题标题】:NSURL - Correct Encoding for parametersNSURL - 参数的正确编码
【发布时间】:2015-02-11 06:37:27
【问题描述】:
在我的代码中,如果字符串在参数中包含一些特殊字符&,我需要从NSString 编码NSURL。
例如:NSString* urlText = @"70.84.58.40/projects/igolf/?TipThumb=GOLF & 58B.jpg&query=some";
使用stringByAddingPercentEscapesUsingEncoding不会编码&,这将被视为url中的一些其他查询。
那么,在这种情况下,从NSString 编码NSURL 的正确格式是什么。
【问题讨论】:
标签:
ios
iphone
nsurl
nsstringencoding
【解决方案1】:
您可以使用此静态辅助方法为 URL 编码字符串:
+ (NSString*)urlEncode:(NSString*)encodingString
{
return (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL,
(CFStringRef)encodingString,
NULL,
(CFStringRef)@" ",
CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding)));
}
【解决方案2】:
你可以在 NSString 上创建 Category 来绕过这个问题,试试这个 link 提供解决方案的地方。这是帖子中的示例代码
#import <Foundation/Foundation.h>
@interface NSString (URLEncoding)
-(NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding;
@end
下面是实现:
#import "NSString+URLEncoding.h"
@implementation NSString (URLEncoding)
-(NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding {
return (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
(CFStringRef)self,
NULL,
(CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",
CFStringConvertNSStringEncodingToEncoding(encoding));
}
@end
现在我们可以简单地这样做了:
NSString *raw = @"GOLF & 58B.jpg&query=some";
NSString *url = [NSString stringWithFormat:@"70.84.58.40/projects/igolf/?TipThumb=%@",
[raw urlEncodeUsingEncoding:NSUTF8Encoding]];