CFURLCreateStringByAddingPercentEscapes

[转载]CFURLCreateStringByAddingPercentEscapes

(2015-08-21 18:43:06)[删除]

转载▼

标签:

转载

 

原文地址:CFURLCreateStringByAddingPercentEscapes作者:IOS开发

在 iOS 程序访问 HTTP 资源时需要对 URL 进行 Encode,比如像拼出来的 http://unmi.cc?p1=%+&sd f&p2=中文,其中的中文、特殊符号&%和空格都必须进行转译才能正确访问。

在 Java、.net 和 JS 中都有相应的 encodeURL 方法可用,在 Objective-C 语言中,你可以试下

- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)enc;

来对完整的 URL(带请求参数的)进行编码,比如执行下面的代码:

 NSString *[email protected]"http://unmi.cc?p1=%+&sd &p2=中文";  NSString *encodedValue = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

上面代码转换出的 encodedValue 是:

http://unmi.cc?p1=%+&sd &p2=中文

可见,它不会转换 URL 中的 ?%& 符号,这也正常,因为它肯定分不出哪个 & 是参数的连接符号还是参数值,你可以单独编码参数,然后在拼接成 URL 之前把属性参数值中的 ?%& 等符号分别替换成相应的编码。

或者,您还可以试下另外一个方法来单独编码参数值,然后拼接成完整的 URL:

CF_EXPORT
CFStringRef CFURLCreateStringByAddingPercentEscapes(CFAllocatorRef allocator, CFStringRef originalString, CFStringRef charactersToLeaved, CFStringRef legalURLCharactersToBeEscaped, CFStringEncoding encoding);

本文原始链接:http://unmi.cc/objective-c-urlencode, 来自:隔叶黄莺 Unmi Blog

参考代码,分别编码前面的 p1=%+&sd f&p2=中文,两个参数的代码和结果如下:

NSString *param = @"%+&sd f";     NSString *encodedValue = (NSString*)CFURLCreateStringByAddingPercentEscapes(nil,                                    (CFStringRef)param, nil,                                 (CFStringRef)@"!*‘();:@&=+$,/?%#[]", kCFStringEncodingUTF8);

这样编码出来的 encodedValue 为 %+&sd f,对 ?%& 等符号也会编码的。用上面的代码对 “中文” 进行编码的结果是:中文,与前面是一致的。

我实际应用时还是这个 CFURLCreateStringByAddingPercentEscapes 方法比较方便。

我们在项目中是使用的 ASIHTTPRequest 组件来访问 URL 的,在使用 ASIFormDataRequest 时发出它其中有一个方法:

- (NSString*)encodeURL:(NSString *)string {     NSString *newString = NSMakeCollectable([(NSString *)CFURLCreateStringByAddingPercentEscapes( kCFAllocatorDefault,  (CFStringRef)string, NULL, CFSTR(":/?#[]@!$ &‘()*+,;="<>%{}|\^~`"),   CFStringConvertNSStringEncodingToEncoding([self stringEncoding])) autorelease]);     if (newString) {         return newString;     }     return @""; }

看起来它就是个 Objective-C 版的 encodeURL 方法,可是它声明成了一个实例方法,必须构造出 ASIFormDataRequest 实例才能使用它,在它的父类 ASIHTTPRequest 中都无该方法。现在来试验一下这个方法的返回值:

ASIFormDataRequest *formDataRequest = [ASIFormDataRequest requestWithURL:nil]; NSString *encodedValue1 = [formDataRequest encodeURL:@"%+&sd f"]; NSString *encodedValue2 = [formDataRequest encodeURL:@"中文"];

得出的 encodedValue1 和 encodedValue2 分别是 %+&sd f 和 中文,和前面是一致的,所以你可以用 ASIFormDataRequest 提供的方式来进行 URLEncode,把这个方法提出为一个工具方法即可。

本文链接 http://unmi.cc/objective-c-urlencode, 来自 隔叶黄莺 Unmi Blog

时间: 2024-11-07 02:07:33

CFURLCreateStringByAddingPercentEscapes的相关文章

CFURLCreateStringByAddingPercentEscapes与CFURLCreateStringByReplacingPercentEscapesUsingEncoding

iOS中访问HTTP资源需要对URL进行Encode才能正确访问. OC中有方法: - (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)enc; 例如: NSString *[email protected]"http://unmi.cc?p1=%+&sd &p2=中文"; NSString *encodedValue = [url stringByAddingPercent

IOS使用CFURLCreateStringByAddingPercentEscapes进行URL编码

 iOS程序访问HTTP资源时需要对URL进行UTF8编码,我在之前一直都喜欢使用NSString的stringByAddingPercentEscapesUsingEncoding方法进行编码.今天在使用Analyze分析工程时,提示下面的方法可能存在内存泄露: NSString *enString =(NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)stringURL

URL编码CFURLCreateStringByAddingPercentEscapes使用(ARC)

URL 编码:CFURLCreateStringByAddingPercentEscapes If you have tried to send any information using a GET web request, you would have come cross an annoying problem, That annoying problem is making sure that the URL is corrently encoded. The issue is that

URL中有中文字符,转码方法

服务端返回的urlString里面有时含有中文,使用 [NSURL URLWithString:urlString]生成URL对象时,iOS客户端不能正确进行网络请求,网上找到的URLEncode方法又不能完全解决问题. 方法1: NSString* encodedString = [urlStringstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 方法2: NSString * encodedString = (

ARC下OC对象和CF对象之间的桥接(bridge)

在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环境下编译器不会自动管理CF对象的内存,所以当我们创建了一个CF对象以后就需要我们使用CFRelease将其手动释放,那么CF和OC相互转化的时候该如何管理内存呢?答案就是我们在需要时可以使用__bridge,__bridge_transfer,__bridge_retained,具体介绍和用法如下

iOS开发——网络编程OC篇&amp;使用WebView构建HyBird应用

使用WebView构建HyBird应用 HyBird是一种本地技术与Web相结合,能过实现跨平台的移动应用开发,最常用的一个框架:PhoneGap 一:首先,写好html代码 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, m

ios开发中object-c中UTF-8 和 GBK 的 NSString 相互转化的方法

应用都要遇到一个很头疼的问题:文字编码,汉字的 GBK 和 国际通用的 UTF-8 的互相转化稍一不慎, 就会满屏乱码.下面介绍 UTF-8 和 GBK 的 NSString 相互转化的方法 NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); char* c_test = "北京"; int nLen = strlen(c_test); NSS

ios新特征 ARC详解

IOS ARC 分类: IOS ARC2013-01-17 09:16 2069人阅读 评论(0) 收藏 举报 目录(?)[+] 关闭工程的ARC(Automatic Reference Counting) 顺带附上ARC教程 本文部分实例取自iOS 5 Toturail一书中关于ARC的教程和公开内容,仅用于技术交流和讨论.请不要将本文的部分或全部内容用于商用,谢谢合作. 欢迎转载本文,但是转载请注明本文出处:http://www.onevcat.com/2012/06/arc-hand-by

将image进行base64编码

@interface NSString (Extension) /** *  将image进行base64编码 */ + (NSString *)imageBase64:(UIImage *)image; @end + (NSString *)imageBase64:(UIImage *)image { image = [self imageWithImageSimple:image scaledToSize:CGSizeMake(200, 200)]; NSData *data =[NSDat