文件来源地:http://blog.csdn.net/eqiuno/article/details/7315410
如果你在做基于RESTFul的应用,你肯定需要对传递的参数进行编码。比如你要传递信息是:
China,Beijing,HaIDian经过URL编码后,这个字串成了
China%20Beijing%20%HaIDian
在iOS中你可以通过如下Nsstring的方法轻松实现URL编码
stringByAddingPercentEscapesUsingEnCoding:NSUTF8StringEnCoding
相应的,你可以通过下面的方法还原字串:
stringByReplacingPercentEscapesUsingEnCoding:NSUTF8StringEnCoding下面是个完整的例子:
Nsstring *rawText = @"One broaDWay,CambrIDge,MA";
Nsstring *encodedText = [rawText stringByAddingPercentEscapesUsingEnCoding:NSUTF8StringEnCoding];
NSLog(@"Encoded text: %@",encodedText);
Nsstring *decodedText = [encodedText stringByReplacingPercentEscapesUsingEnCoding:NSUTF8StringEnCoding];
NSLog(@"Original text: %@",decodedText);
输出是:
Encoded text: One%20broaDWay,%20CambrIDge,%20MA
Original text: One broaDWay,MA截至到现在,一切都很美好,Nsstring可以很好的工作。但是stringByAddingPercentEscapesUsingEnCoding不能处理iOs的保留字比如&和/.
看看这个例子:
Nsstring *rawText = @"bed Bath & Beyond - URL=http://www.bedbathandbeyond.com/";
Nsstring *encodedText = [rawText stringByAddingPercentEscapesUsingEnCoding:NSUTF8StringEnCoding];
NSLog(@"Encoded text: %@",51); Font-family:Arial; Font-size:14px; line-height:26px"> bed%20Bath%20&%20Beyond%20-%20URL=http://www.bedbathandbeyond.com/
Original text: bed Bath & Beyond – URL=http://www.bedbathandbeyond.com/
注意:&和/没有被编码。
当然这种小问题肯定有解决方案,我们看看Google是怎么做的。先上源码
#import "GTMNsstring+URLArguments.h"
#import "GTMGarbageCollection.h"
@implementation Nsstring (GTMNsstringURLArgumentsAdditions)
- (Nsstring*)gtm_stringByEscaPingForURLArgument {
// Encode all the reserved characters,per RFC 3986
// (<http://www.ietf.org/rfc/rfc3986.txt>)
CFStringRef escaped =
CFURLCreateStringByAddingPercentEscapes(kcfAllocatorDefault,
(CFStringRef)self,
NulL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kcfStringEnCodingUTF8);
return GTMCFautorelease(escaped);
}
- (Nsstring*)gtm_stringByUnescaPingFromURLArgument {
NSMutableString *resultString = [NSMutableString stringWithString:self];
[resultString replaceOccurrencesOfString:@"+"
withString:@" "
options:NSliteralSearch
range:NSMakeRange(0,[resultString length])];
return [resultString stringByReplacingPercentEscapesUsingEnCoding:NSUTF8StringEnCoding];
}
@end
眼熟么这句Nsstring (GTMNsstringURLArgumentsAdditions),这不就是用category给NString添加了一个新的方法么。
如果你把这个文件加入你的工程,好了现在,你的Nsstring类的实例和子类实例就已经有了支持rfc3968标准的编码和解码能力了。cool吧。
总结以上是内存溢出为你收集整理的URL encoding方法 cocoa foundation全部内容,希望文章能够帮你解决URL encoding方法 cocoa foundation所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)