NSURL - 参数的正确编码

时间:2014-12-12 14:16:17

标签: ios iphone nsurl nsstringencoding

在我的代码中,如果字符串在参数中包含一些特殊字符NSURL,我需要从NSString进行编码&

EX:NSString* urlText = @"70.84.58.40/projects/igolf/?TipThumb=GOLF & 58B.jpg&query=some";

使用stringByAddingPercentEscapesUsingEncoding不会对&进行编码,这会被视为url中的其他一些查询。 那么,在这种情况下,从NSURL编码NSString的格式是正确的。

2 个答案:

答案 0 :(得分:0)

您可以使用此静态帮助程序方法对URL的字符串进行编码:

+ (NSString*)urlEncode:(NSString*)encodingString
{
    return (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL,
       (CFStringRef)encodingString,
       NULL,
       (CFStringRef)@" ",
       CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding)));
}

答案 1 :(得分:0)

您可以在NSString上创建类别以绕过问题,尝试使用提供解决方案的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]];