[解決済み] Objective-CとSwiftのURLエンコーディング
質問
私は
NSString
をこのようにします。
http://www.
に変換したいのですが。
http%3A%2F%2Fwww.
どうすればいいのでしょうか?
どのように解決するのですか?
欲しい文字をエスケープするのは、もう少し手間がかかります。
コード例
iOS7以上。
NSString *unescaped = @"http://www";
NSString *escapedString = [unescaped stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]];
NSLog(@"escapedString: %@", escapedString);
NSLogの出力です。
エスケープ文字列: http%3A%2F%2Fwww
URLエンコードに便利な文字セットは以下の通りです。
URLFragmentAllowedCharacterSet "#%<>[\]^`{|}
URLHostAllowedCharacterSet "#%/<>?@\^`{|}
URLPasswordAllowedCharacterSet "#%/:<>?@[\]^`{|}
URLPathAllowedCharacterSet "#%;<>?[\]^`{|}
URLQueryAllowedCharacterSet "#%<>[\]^`{|}
URLUserAllowedCharacterSet "#%/:<>?@[\]^`
上記を全て組み合わせたキャラクタセットを作成する。
NSCharacterSet *URLCombinedCharacterSet = [[NSCharacterSet characterSetWithCharactersInString:@" \"#%/:<>?@[\\]^`{|}"] invertedSet];
Base64を作成する
Base64キャラクタセットの場合。
NSCharacterSet *URLBase64CharacterSet = [[NSCharacterSet characterSetWithCharactersInString:@"/+=\n"] invertedSet];
Swift 3.0に対応。
var escapedString = originalString.addingPercentEncoding(withAllowedCharacters:.urlHostAllowed)
<ブロッククオート
Swift 2.xの場合。
var escapedString = originalString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLHostAllowedCharacterSet())
注
stringByAddingPercentEncodingWithAllowedCharacters
は、エンコーディングが必要なUTF-8文字もエンコードします。
iOS7以前はCore Foundationを使用
Core FoundationをARCで使う。
NSString *escapedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(
NULL,
(__bridge CFStringRef) unescaped,
NULL,
CFSTR("!*'();:@&=+$,/?%#[]\" "),
kCFStringEncodingUTF8));
ARCなしでCore Foundationを使用する。
NSString *escapedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(
NULL,
(CFStringRef)unescaped,
NULL,
CFSTR("!*'();:@&=+$,/?%#[]\" "),
kCFStringEncodingUTF8);
注
-stringByAddingPercentEscapesUsingEncoding
は正しいエンコーディングを生成しません。この場合、同じ文字列を返すものはエンコードされません。
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding
は14文字をエンコードします。
%^{}[]|"<> と、パーセントエスケープされたスペース文字があります。
testStringです。
" `~!@#$%^&*()_+-={}[]|\\:;\"'<,>.?/AZaz"
エンコードされた文字列です。
"%20%60~!@%23$%25%5E&*()_+-=%7B%7D%5B%5D%7C%5C:;%22'%3C,%3E.?/AZaz"
注:この文字のセットがあなたのニーズを満たしているかどうかを検討し、そうでない場合は必要に応じて変更してください。
エンコーディングを必要とするRFC 3986の文字 (エンコーディングのプレフィックス文字であるため、% が追加されています)。
"!#$&'()*+,/:;=?@[]%"
一部の"unreserved characters"は追加でエンコードされます。
<ブロッククオート"\n\r \"%-.<>\^_`{|}~"
関連
-
[解決済み] Objective-CでNSStringsを連結するためのショートカット集
-
[解決済み] Objective-Cの定数
-
[解決済み] JavaScriptでURLをエンコードする?
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] カスタムオブジェクトを含むNSMutableArrayをソートするにはどうすればよいですか?
-
[解決済み] Objective-Cで、ある文字列が他の文字列を含んでいるかどうかを調べるにはどうすればよいですか?
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] iOSのバージョンを確認する方法を教えてください。
-
[解決済み] クエリ文字列パラメータのJava URLエンコーディング
-
[解決済み] UITextViewのサイズをコンテンツに合わせるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Objective-Cでデリゲートを作成するにはどうしたらいいですか?
-
[解決済み] UITextViewのプレースホルダー
-
[解決済み] Unwind segueは何に使うのか、どう使うのか?
-
[解決済み] UITextViewのマージン/パディングをなくす方法
-
[解決済み] iPhone 5の画面解像度に対応したアプリを開発・移行するには?
-
[解決済み] iPadマルチタスクのサポートには、これらの方向が必要です。
-
[解決済み] Swift で HTTP リクエストを行うにはどうしたらいいですか?
-
[解決済み] Swiftの配列を文字列に変換するには?
-
[解決済み】Swift - URLをエンコードする
-
[解決済み】文字列をURLエンコードする方法