Cocoa Fundamentals Categoryの例−より使いやすいURL encoding手法−
3304 ワード
RESTFulベースのアプリケーションをしている場合は、伝達されたパラメータを符号化する必要があります.例えば、メッセージを伝えるには:
iOSでは、以下のNSStringの方法で簡単にURL符号化を実現できます.
したがって、次の方法で文字列を復元できます.
出力:
この例を見てみましょう.
出力:
Bed%20Bath%20&%20Beyond%20-%20URL=http://www.bedbathandbeyond.com/Original text: Bed Bath & Beyond – URL=http://www.bedbathandbeyond.com/
注意:&と/は符号化されていません.
もちろん、このような小さな問題には解決策があるに違いありません.googleがどのようにしているかを見てみましょう.ソースコードを先に上げる
見覚えのあるNSString(GTMNSStringURLArgumentsAdditions)は、CategoryでNStringに新しい方法を追加したのではないでしょうか.
このファイルをプロジェクトに追加すると、NSStringクラスのインスタンスとサブクラスのインスタンスはrfc 3968標準をサポートする符号化と復号化能力を持っています.coolでしょう.
Googleソースリンクアドレス
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, Cambridge, MA
今まで、すべてはとてもすばらしくて、NSStringはとても良い仕事ができます.しかしstringByAddingPercentEscapesUsingEncodingはiOSの予約ワード、例えば&および/を処理できない.この例を見てみましょう.
NSString *rawText = @"Bed Bath & Beyond - URL=http://www.bedbathandbeyond.com/";
NSString *encodedText = [rawText stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"Encoded text: %@", encodedText);
NSString *decodedText = [encodedText stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"Original text: %@", decodedText);
出力:
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クラスのインスタンスとサブクラスのインスタンスはrfc 3968標準をサポートする符号化と復号化能力を持っています.coolでしょう.
Googleソースリンクアドレス