`

[iOS]iOS 中的 url 编码问题 (转)url encode nsstring ios

    博客分类:
  • ios
 
阅读更多

原文:http://blog.csdn.net/kesalin/article/details/6678939

NSString 的 stringByAddingPercentEscapesUsingEncoding 可以对 url 参数进行编码,但是有点小问题,不会对所有需要编码的字符都编码。我们可以通过  CFStringRef 的 

CFURLCreateStringByAddingPercentEscapes 函数来封装这个功能。代码如下:

 

  1. - (NSString *)encodeToPercentEscapeString: (NSString *) input  
  2. {  
  3.     // Encode all the reserved characters, per RFC 3986  
  4.     // (<http://www.ietf.org/rfc/rfc3986.txt>)  
  5.     NSString *outputStr = (NSString *)   
  6.     CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,  
  7.                                             (CFStringRef)input,  
  8.                                             NULL,  
  9.                                             (CFStringRef)@"!*'();:@&=+$,/?%#[]",  
  10.                                             kCFStringEncodingUTF8);  
  11.     return outputStr;  
  12. }  
  13.   
  14. - (NSString *)decodeFromPercentEscapeString: (NSString *) input  
  15. {  
  16.     NSMutableString *outputStr = [NSMutableString stringWithString:input];  
  17.     [outputStr replaceOccurrencesOfString:@"+"  
  18.                                withString:@" "  
  19.                                   options:NSLiteralSearch  
  20.                                     range:NSMakeRange(0, [outputStr length])];  
  21.   
  22.     return [outputStr stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];  
  23. }  

测试代码:

 

 

  1. NSString * testUrl      = @"http://search.google.com?keywords=($# it's {a*123})00!*'();:@&=+$,/?%#[]";  
  2. NSLog(@"original: %@", testUrl);  
  3.   
  4. NSString * encodeStr    = [self encodeToPercentEscapeString:testUrl];  
  5. NSLog(@"encoded: %@", encodeStr);  
  6.   
  7. NSString * encodeStr2   = [testUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];  
  8. NSLog(@"encoded2:%@", encodeStr2);  
  9.   
  10. NSString * decodeStr    = [self decodeFromPercentEscapeString:encodeStr];  
  11. NSLog(@"decoded: %@", decodeStr);  

结果如下:

 

  1. >> original: http://search.google.com?keywords=($# it's {a*123})00!*'();:@&=+$,/?%#[]  
  2. >> encoded:  http%3A%2F%2Fsearch.google.com%3Fkeywords%3D%28%24%23%20it%27s%20%7Ba%2A123%7D%2900%21%2A%27%28%29%3B%3A%40%26%3D%2B%24%2C%2F%3F%25%23%5B%5D  
  3. >> encoded2: http://search.google.com?keywords=($%23%20it's%20%7Ba*123%7D)00!*'();:@&=+$,/?%25%23%5B%5D  
  4. >> decoded:  http://search.google.com?keywords=($# it's {a*123})00!*'();:@&=+$,/?%#[] 
分享到:
评论

相关推荐

    IOS中对Url进行编码和解码示例

    本文主要介绍IOS中对Url进行编码和解码示例,具体如下: 1.非ARC模式下 + (NSString *)encodeToPercentEscapeString: (NSString *) input { // Encode all the reserved characters, per RFC 3986 // () ...

    iOS特殊字符处理

    在处理特殊字符时,可以使用`stringByAddingPercentEncodingWithAllowedCharacters:`方法进行URL编码,防止特殊字符在URL中引起解析问题。例如,空格会被转换为"%20"。相反,如果需要解码,可以使用`...

    iOS CSV文件导出,保存

    iOS CSV文件导出,保存 -(void)writeDict:(NSDictionary *)dict forFirst:(BOOL)first{ NSMutableString *str = [NSMutableString string]; //第一次写入字典的key值 if (first) { for (NSString *key in ...

    ios非UTF-8格式的网页解析

    这里,我们不再需要手动转换编码,因为`.utf8`是`NSString`的内置编码之一,可以直接用于从URL加载UTF-8编码的字符串。 需要注意的是,上述代码中的`try!`表示我们假设数据加载和字符串创建不会出错。在实际应用中...

    ios 录音文件caf转mp3

    ios录音的caf文件转MP3文件,以兼容android 注意音频参数的设置,如果声音异常,请调整参数。 code: AVAudioSession *session = [AVAudioSession sharedInstance]; NSError *sessionError; [session ...

    iOS Json 实体类序列化及反序列化

    在iOS开发中,数据交换和存储常常涉及到JSON格式,它是一种轻量级、易于阅读和编写的文本格式。本文将详细讲解如何在Objective-C或Swift环境下,针对ARC(Automatic Reference Counting)内存管理机制,实现JSON实体...

    iOS下json解析工具

    iOS下解析json数据,自己亲自使用过,挺好用的。 使用JSONKit的解析方法:(需导入包:#import "JSONKit/JSONKit.h") - (void)printJson{ //如果json是“单层”的,即value都是字符串、数字,可以使用...

    ios7下二维码生成Demo

    在iOS开发中,二维码(Quick Response Code)是一种广泛使用的数据编码方式,允许用户快速扫描获取信息,如网址、联系人信息、文本等。在iOS 7及更高版本中,Apple引入了Core Image框架,提供了对二维码生成和识别的...

    iOS 给已有类添加属性

    在iOS开发中,Objective-C是一种主要的编程语言,它提供了强大的动态性,使得开发者可以在运行时修改类的行为。本文将深入探讨如何利用Runtime机制给已有的类添加对象属性和非对象属性。 首先,理解Runtime机制是...

    ios-将数据使用plist方式缓存(封装).zip

    在iOS开发中,数据持久化是一项重要的技术,用于在应用退出后仍能保存用户的数据,以便下次使用时恢复。Plist(Property List)是苹果提供的一种数据存储格式,常用于简单数据结构的存储,如数组、字典、字符串、...

    iOS plist详细使用

    在iOS开发中,`plist`(Property List)是一种常见的数据存储方式,用于持久化应用程序的数据。它是XML或二进制格式的文件,可以存储数组、字典、字符串、数字、日期等多种基本数据类型。本篇文章将深入探讨iOS中`...

    浅谈强大易用支持URL Rewrite的iOS路由库FFRouter

    FFRouter 是 iOS 中一个强大且易用的 URL 路由库,支持 URL Rewrite,使 APP 在发布之后也可以动态修改相关路由逻辑。基于匹配查找 URL,效率高。集成和使用都非常简单! Github链接:FFRouter 功能 具备基本的 ...

    iOS二维码扫描

    在iOS应用开发中,二维码(QR Code)扫描是一项常见的功能,可以用于快速交换信息、链接、联系方式等。本文将深入探讨如何在iOS中实现二维码扫描和生成,主要涉及ZBarSDK用于扫描,libqrencode库用于生成二维码。 ...

    Xcode代码生成

    在iOS和macOS开发中,Xcode是一款至关重要的集成开发环境(IDE),它为开发者提供了丰富的功能,包括代码编辑、调试、构建以及项目管理等。本文将深入探讨"Xcode代码生成"这一主题,主要涉及懒加载、NSCoding协议...

    ios-javascriptcore-demo:iOS 演示

    JavaScriptCore 是苹果在其移动操作系统 iOS 和 macOS 中内置的一个框架,用于在原生应用程序中执行 JavaScript 代码。这个框架使得 iOS 开发者可以充分利用 JavaScript 的灵活性和动态性,同时结合 Objective-C 或 ...

    Ascii85-Encoding-Categories:NSData 和 NSString 的简单类别以支持将它们编码为 Ascii85。 这些类别采用 RFC 1924 Ascii85 字符集

    本文将深入探讨Ascii85编码,以及如何在Objective-C中利用类别(Category)为NSData和NSString添加这种编码功能。 Ascii85编码源于Adobe PostScript,后来被纳入了RFC 1924标准,其目的是将二进制数据转换为ASCII...

    Base64加密解密封装

    我们可以预想JKCommonFunc.h中会定义一个类(例如`JKBase64Util`),声明了Base64编码和解码的相关方法,如`+ (NSString *)base64Encode:(NSData *)data`和`+ (NSData *)base64Decode:(NSString *)base64String`。...

    iOS中自动实现对象序列化的方法详解

    3. 遍历过程中,根据属性类型设置对应的编码类型,例如,如果是`NSString`、`NSNumber`、`NSArray`或`UIImage`,我们将类型字符串替换为预定义的常量,以便后续进行编码操作。 4. 使用`valueForKey:`方法获取属性的...

    iOS Runntime 动态添加类方法并调用-class_addMethod

    iOS Runntime 是Objective-C的重要组成部分,它赋予了这个语言强大的动态特性。在Objective-C中,我们可以在程序运行时动态地添加、修改或查询类的方法。`class_addMethod`函数是实现这一功能的关键,它允许我们在...

    JSON 转换工具

    在HandyJSON中,可以使用`encode`方法直接将对象编码为JSON数据: ```objc NSDictionary *dict = [model toDictionary]; NSString *jsonString = [NSJSONSerialization JSONObjectWithData:[NSJSONSerialization ...

Global site tag (gtag.js) - Google Analytics