在我的代码中,如果字符串在参数中包含一些特殊字符NSURL
,我需要从NSString
进行编码&
。
EX:NSString* urlText = @"70.84.58.40/projects/igolf/?TipThumb=GOLF & 58B.jpg&query=some";
使用stringByAddingPercentEscapesUsingEncoding
不会对&
进行编码,这会被视为url中的其他一些查询。
那么,在这种情况下,从NSURL
编码NSString
的格式是正确的。
答案 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]];