前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS字符串编码与解码方法的实现与调用(UrlEncode/UrlDecode)

iOS字符串编码与解码方法的实现与调用(UrlEncode/UrlDecode)

作者头像
陈满iOS
发布2018-09-10 11:09:17
2.6K0
发布2018-09-10 11:09:17
举报
文章被收录于专栏:陈满iOS陈满iOS

1.本编解码方法的功能说明

  • UrlEncode方法 把任何参数转换成适合放在URL中的字符串。具体规则:

  1. 字母,数字,连字符不变。
  2. 空格转换成加号
  3. 其他所有的字符转换成用百分号表示,并接上字符的两位十六进制编码。如%2F
  • UrlDecode方法 其功能与编码相反

2. 字符串在编码之前之后的效果

原字符串:

代码语言:javascript
复制
Vk/nQmguwJIN

编码之后:

代码语言:javascript
复制
Vk%2FnQmguwJIN

解码之后:

代码语言:javascript
复制
Vk/nQmguwJIN

3.UrlEncode/UrlDecode方法的实现

编码

代码语言:javascript
复制
+(NSString*)encodeString:(NSString*)unencodedString{
    
    // CharactersToBeEscaped = @":/?&=;+!@#$()~',*";
    // CharactersToLeaveUnescaped = @"[].";
    
    NSString *encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                              (CFStringRef)unencodedString,
                                                              NULL,
                                                              (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                                                              kCFStringEncodingUTF8));
    
    return encodedString;
}

解码

代码语言:javascript
复制
//URLDEcode
+(NSString *)decodeString:(NSString*)encodedString

{
    //NSString *decodedString = [encodedString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding ];
    
    NSString *decodedString  = (__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL,(__bridge CFStringRef)encodedString,CFSTR(""),CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
    return decodedString;
}

4.使用建议

建议自己写个Category。比如,可以基于NSString新建一个URLEncoding类别文件,类名分别为NSString+URLEncoding.h和NSString+URLEncoding.m。然后,在你需要的地方导入该头文件即可。作为对比,与上面的实现不同,下面采用replaceOccurrencesOfString:方法实现解码功能。

其中: NSString+URLEncoding.h

代码语言:javascript
复制
#import <Foundation/Foundation.h>

@interface NSString (URLEncoding)

// 字符串转码
- (NSString*)urlEncodeString;

// 反URL编码
- (NSString *)decodeFromPercentEscapeString;

@end

NSString+URLEncoding.m

代码语言:javascript
复制
#import "NSString+URLEncoding.h"

@implementation NSString (URLEncoding)

// 字符串编码
- (NSString *)urlEncodeString
{
    NSString *result = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)self, NULL, CFSTR(":/?#[]@!$&’(){}<>*+,;="),kCFStringEncodingUTF8));
    return result;
}

// 反URL编码
- (NSString *)decodeFromPercentEscapeString
{
    NSMutableString *outputStr = [NSMutableString stringWithString:self];
    [outputStr replaceOccurrencesOfString:@"+"
                               withString:@" "
                                  options:NSLiteralSearch
                                    range:NSMakeRange(0, [outputStr length])];
    
    return [outputStr stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
}

5. 调用范例

在调用处的类中

代码语言:javascript
复制
#import "NSString+URLEncoding.h"

然后,调用上述方法:

代码语言:javascript
复制
[testStr urlEncodeString];

即可。

参考文献

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.06.04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.本编解码方法的功能说明
  • 2. 字符串在编码之前之后的效果
  • 3.UrlEncode/UrlDecode方法的实现
  • 4.使用建议
  • 5. 调用范例
    • 参考文献
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档