stringByAddingPercentEscapesUsingEncodingは使ってはいけない
NSStringのstringByAddingPercentEscapesUsingEncodingは使ってはいけません。
名前からしてURLに使えない文字をエスケープしてくれることを期待できそうなが名前に反してURLに使えない文字をエスケープしないからです。
Tumblr関連アプリではiviewがはまり、tumbladdictもはまり、tumblr gearもはまった、メールアドレスに+が入っているとログインできないバグの原因は(たぶん)この思わせぶりな名前のメソッドのせいです。実際のところこのメソッドは
(0×20)"#%><[\]^`{|}
しかエスケープしません!つまりRFC2396で使用できない、もしくは予約語となっている文字である
$&+,/:;=?@
をエスケープしてくれない全く使いみちのないメソッドです(たしかにドキュメントにはRFCのことには触れずにただエスケープするとしか書かれてないけど)。
解決策
Google Code SearchでCFURLCreateStringByAddingPercentEscapesを検索するとたくさん出てくる
NSString* encodeURIComponent(NSString* s) {
return [((NSString*)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)s,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8)) autorelease];
}
こういう方法が定石のようです。これでもエスケープすべき文字すべてをエスケープすることができるようになります。
こういうCocoaプログラマだったらいまさらみたいな常識、楽して身につける方法ないでしょうか。
About this entry
You’re currently reading “stringByAddingPercentEscapesUsingEncodingは使ってはいけない,” an entry on ku
- Published:
- 2009.06.20 / 2am
- Category:
- iPhone, objectiveC

No comments
Jump to comment form | comments rss [?]