ios - Swift - 编码 URL

标签 ios swift urlencode

如果我像这样编码字符串:

var escapedString = originalString.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)

它不会转义斜杠/

我搜索并找到了这个 Objective C 代码:

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

有没有更简单的方法来编码 URL,如果没有,我该如何在 Swift 中编写它?

最佳答案

swift 3

在 Swift 3 中,有addingPercentEncoding

let originalString = "test/test"
let escapedString = originalString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
print(escapedString!)

输出:

test%2Ftest

swift 1

在 iOS 7 及更高版本中,有 stringByAddingPercentEncodingWithAllowedCharacters

var originalString = "test/test"
var escapedString = originalString.stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet())
println("escapedString: \(escapedString)")

输出:

test%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)")

输出:

test%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)\'")
}

关于ios - Swift - 编码 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48428291/

相关文章:

ios - UINavigationBar 详细信息文本标签

algorithm - 产生url安全数据的压缩算法

javascript - 使用 JavaScript 将 "%"发送到 API

ios - 使用 Google 跟踪代码管理器在 iOS 上获取唯一设备 ID

ios - 显示前加载ViewController的WebView

ios - 刷新持有 UITableView 的容器 View - Swift

java - 对于针对未编码的 URL 执行 URLDecoder 是否有任何顾虑?

ios - iPad 应用被拒绝, "failed to launch in time"崩溃

ios - 如何接受来自 iOS 白名单的自签名服务器证书?

Swift、核心数据、可选的 Integer16 和 keyPath