iOS文字列符号化と復号化方法の実装と呼び出し(UrlEncode/UrlDecode)
3485 ワード
1.本符号化方法の機能説明
2.文字列の符号化前以降の効果
元の文字列:Vk/nQmguwJIN
エンコード後:Vk%2FnQmguwJIN
復号後:Vk/nQmguwJIN
3.UrlEncode/UrlDecodeメソッドの実装
エンコーディング+(NSString*)encodeString:(NSString*)unencodedString{
// CharactersToBeEscaped = @":/?&=;+!@#$()~',*";
// CharactersToLeaveUnescaped = @"[].";
NSString *encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)unencodedString,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8));
return encodedString;
}
デコード//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に基づいて、NSString+URLEncodingというクラス名のURLEncodingカテゴリファイルを新規作成することができる.hとNSString+URLEncoding.m.次に、必要な場所にヘッダファイルをインポートすればいいです.対照的に、上記の実装とは異なり、以下ではreplaceOccurrencesOfString:メソッドを用いて復号機能を実現する.
そのうち:NSString+URLEncoding.h #import
@interface NSString (URLEncoding)
//
- (NSString*)urlEncodeString;
// URL
- (NSString *)decodeFromPercentEscapeString;
@end
NSString+URLEncoding.m #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.呼び出し例
呼び出し先のクラス#import "NSString+URLEncoding.h"
次に、上記のメソッドを呼び出します.[testStr urlEncodeString];
できます.
参考文献
Vk/nQmguwJIN
Vk%2FnQmguwJIN
Vk/nQmguwJIN
エンコーディング
+(NSString*)encodeString:(NSString*)unencodedString{
// CharactersToBeEscaped = @":/?&=;+!@#$()~',*";
// CharactersToLeaveUnescaped = @"[].";
NSString *encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)unencodedString,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8));
return encodedString;
}
デコード
//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に基づいて、NSString+URLEncodingというクラス名のURLEncodingカテゴリファイルを新規作成することができる.hとNSString+URLEncoding.m.次に、必要な場所にヘッダファイルをインポートすればいいです.対照的に、上記の実装とは異なり、以下ではreplaceOccurrencesOfString:メソッドを用いて復号機能を実現する.
そのうち:NSString+URLEncoding.h #import
@interface NSString (URLEncoding)
//
- (NSString*)urlEncodeString;
// URL
- (NSString *)decodeFromPercentEscapeString;
@end
NSString+URLEncoding.m #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.呼び出し例
呼び出し先のクラス#import "NSString+URLEncoding.h"
次に、上記のメソッドを呼び出します.[testStr urlEncodeString];
できます.
参考文献
#import
@interface NSString (URLEncoding)
//
- (NSString*)urlEncodeString;
// URL
- (NSString *)decodeFromPercentEscapeString;
@end
#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];
}
呼び出し先のクラス
#import "NSString+URLEncoding.h"
次に、上記のメソッドを呼び出します.
[testStr urlEncodeString];
できます.