Objective-Cで正しくURL encode/decodeする方法

以下のような方法でURLエンコード/デコードできると書かれているサイトが沢山あるが、大嘘つきもいい所だ。特殊文字を取りこぼしまくってる。

//encoding
NSString *escapedUrlString
     = [plainString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];

//decoding
NSString *decodedUrlString
     = [escapedUrlString stringByReplacingPercentEscapesUsingEncoding:NSASCIIStringEncoding];

多分これで全部フォローできていると思うが、もし足りない文字があればコメントで教えて欲しい。

//encoding
NSString *escapedUrlString = (NSString *)CFURLCreateStringByAddingPercentEscapes(
        NULL,
        (CFStringRef)plainString,
        NULL,
        (CFStringRef)@"!*'();:@&=+$,/?%#[]",
        kCFStringEncodingUTF8 );

//decoding
NSString *decodedUrlString = (NSString *) CFURLCreateStringByReplacingPercentEscapesUsingEncoding(
        NULL,
        (CFStringRef) escapedUrlString,
        CFSTR(""),
        kCFStringEncodingUTF8);

というかURL encode/decodeの標準関数が実はあるけど、俺が気づいていないだけなのか?

Be Sociable, Share!

「Objective-Cで正しくURL encode/decodeする方法」への15件のフィードバック

  1. 取りこぼしというより、RFCのどれに対応しているかによるのではないだろうか。

  2. 別に嘘というわけではなく、
    //xxx/日本語/xxx みたいなものをエンコードしたときに、パス区切りまでエンコードしたくない時に使うんですよね。
    スペースを%20にするか+にするかも「URLエンコード」だけではどっちが正しいか悩むところです。

コメントを残す

メールアドレスが公開されることはありません。