[解決済み】Swift - URLをエンコードする
2022-03-25 04:56:36
質問
このように文字列をエンコードすると
var escapedString = originalString.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)
スラッシュをエスケープしない
/
.
検索してみたら、こんなObjective Cのコードが出てきました。
NSString *encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(
NULL,
(CFStringRef)unencodedString,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8 );
URLをエンコードする簡単な方法はありますか?ないとしたら、Swiftでどのように書けばいいのでしょうか?
どのように解決するのですか?
スウィフト3
Swift 3 では、次のようなものがあります。
addingPercentEncoding
let originalString = "test/test"
let escapedString = originalString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
print(escapedString!)
出力します。
テスト%2Ftest
スウィフト1
iOS 7以降では、以下のようなものがあります。
stringByAddingPercentEncodingWithAllowedCharacters
var originalString = "test/test"
var escapedString = originalString.stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet())
println("escapedString: \(escapedString)")
出力します。
テスト%2Ftest
以下は、便利な(反転)文字セットです。
URLFragmentAllowedCharacterSet "#%<>[\]^`{|}
URLHostAllowedCharacterSet "#%/<>?@\^`{|}
URLPasswordAllowedCharacterSet "#%/:<>?@[\]^`{|}
URLPathAllowedCharacterSet "#%;<>?[\]^`{|}
URLQueryAllowedCharacterSet "#%<>[\]^`{|}
URLUserAllowedCharacterSet "#%/:<>?@[\]^`
別の文字をエスケープさせたい場合は、セットを作成します。
文字"="を追加した例。
var originalString = "test/test=42"
var customAllowedSet = NSCharacterSet(charactersInString:"=\"#%/<>?@\\^`{|}").invertedSet
var escapedString = originalString.stringByAddingPercentEncodingWithAllowedCharacters(customAllowedSet)
println("escapedString: \(escapedString)")
出力します。
テスト%2Ftest%3D42
セットにないASCII文字を検証する例。
func printCharactersInSet(set: NSCharacterSet) {
var characters = ""
let iSet = set.invertedSet
for i: UInt32 in 32..<127 {
let c = Character(UnicodeScalar(i))
if iSet.longCharacterIsMember(i) {
characters = characters + String(c)
}
}
print("characters not in set: \'\(characters)\'")
}
関連
-
[解決済み] Swiftを使って音を鳴らすには?
-
[解決済み] JavaScriptでURLをエンコードする?
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] Swiftで#pragmaマーク?
-
[解決済み] クエリ文字列パラメータのJava URLエンコーディング
-
[解決済み] スペースはいつプラス(+)または%20にエンコードされるべきですか?重複
-
[解決済み] SwiftでURLから画像を読み込む/ダウンロードする
-
[解決済み】Swift - StringをDoubleに変換する方法
-
[解決済み】String.substringWithRangeはどのように使うのですか?(または、SwiftでRangeはどのように動作しますか?)
-
[解決済み] Swiftです。nilのオプショナルをテストする
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 'strcmp' はこのスコープで宣言されていません。
-
[解決済み】NSURLErrorDomainエラーコードの説明
-
[解決済み] CFNetwork SSLHandshakeに失敗しました(-9824) NSURLSession/NSURLConnection HTTPのロードに失敗しました(kCFStreamErrorDomainSSL, -9824)
-
[解決済み] Int 型のインデックスを持つ [AnyObject]? の値を添え字として使用できません。
-
[解決済み] Argument passed to call that takes no arguments "エラーを修正するには?
-
[解決済み] Xcodeのロギング。"Metal API Validation Enabled"
-
[解決済み] selector' の引数が '@objc' メソッド、プロパティ、またはイニシャライザを参照していない
-
[解決済み] 条件付きバインディング:letエラーの場合 - 条件付きバインディングのイニシャライザーはOptional型でなければならない
-
[解決済み] UILabelにスペース/パディングを追加する
-
[解決済み] Xcode 6: iOS 8.1 The Developer Disk Imageをマウントできませんでした。