URLエンコードする際の注意

Web APIを利用する際に、パラメータを下記のように指定して行くと思います。

パラメータ名1=パラメータ値&パラメータ名2=パラメータ値...



パラメータに日本語を含む場合はURLエンコードをする必要があります。
ここで私はNSStringクラスのstringByAddingPercentEscapesUsingEncodingメソッドを使ってハマってしまいました。


↓これはNG。stringByAddingPercentEscapesUsingEncodingでは「&」や「+」などがエスケープされません。

[string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]

で、Google先生に聞いてみると情報が簡単に出てきます。きっと当たり前のことなんでしょうね(汗)
私は知らなかったため、ハマってしまいました。


解決方法はこちら。


Core FoundationのCFURLCreateStringByAddingPercentEscapesを使えば解決するとのことです。
実際の使い方は以下を参照してください。

[*1 autorelease]

*1:NSString*)CFURLCreateStringByAddingPercentEscapes(   kCFAllocatorDefault,   (CFStringRef)string, // ←NSString型   NULL,   (CFStringRef)@"!*'();:@&=+$,/?%#[]",// ←通常ではエスケープされないけどエスケープしてほしい文字を記述   kCFStringEncodingUTF8