Facebook Twitter Google Maps RSS
Home iPhoneアプリ URLエンコードについて
formats

URLエンコードについて

こんにちは。陽気なシステム屋のがおまるです。

だんだん暑くなってきましたね。
このまま一気に夏突入なのでしょうか!?
外出されている方はこまめに水分補給してくださいね!

さて、本題ですが、URLエンコードはご存知でしょうか?
文字列を「http://www.apple.com/」から
「http%3A%2F%2Fwww.apple.com%2F」のように変換することです。

なぜこのような事をしなくてはいけないかというと、
URLで使える文字が決まっているからなのです。

例:検索キーワードに「&」が入力された時
本当に「&」が入ったキーワードを検索したいのか、URLパラメータの「&」なのか
区別がつかなくなってしまう為。

RFC3896というURLエンコーディングに関する決まりがあります。
その中には、URLにそのまま使って良いのは下記のように定義されています。

・アルファベット大文字小文字
・数字
・「-._~」の記号

変換しなくてはいけないのは
・「:/?#[]@!$&’()*+,;=」の記号

 

■iOSでのURLエンコード

ただ単純にUTF-8変換してしまうと「&」記号が変換されずに、
URLに渡すパラメータが意図しない動きになります。

以下が対策。

NSString* keyword = @"アイエンター&ドラゴンズ";

CFStringRef originalString = (__bridge CFStringRef)keyword;

CFStringRef encodedString = CFURLCreateStringByAddingPercentEscapes(
                                       kCFAllocatorDefault,
                                       originalString,		// ←エンコード前の文字列
                                       NULL,
                                       CFSTR(":/?#[]@!$&'()*+,;="),
                                       kCFStringEncodingUTF8);
NSLog(@"encodedString=%@", (NSString*)encodedString);

変換後
%E3%82%A2%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%BF%E3%83%BC%26%E3%83%89%E3%83%A9%E3%82%B4%E3%83%B3%E3%82%BA

 

■URLデコード

さきほど変換したものを元にもどします。

CFStringRef decodedString = CFURLCreateStringByReplacingPercentEscapesUsingEncoding(
                                                       kCFAllocatorDefault,
                                                       encodedString,
                                                       CFSTR(""),
                                                       kCFStringEncodingUTF8);
NSLog(@"decodedString=%@", (NSString*)decodedString);

変換後
アイエンター&ドラゴンズ

 

■まとめ

iOSでのURLエンコードですが、iOSのバージョンによって動きがまた変わる可能性もあります。
また上記の例ではUTF-8変換していますが、サーバーの文字コードが特殊な場合は、
サーバーに合わせた文字コードに変換する必要があります。

 

弊社開発実績はこちら

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code lang=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" extra="">