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/48707320/

相关文章:

c# - 完全C# noob,VS2010,不能使用HttpServerUtility.UrlEncode?

javascript - 带感叹号的 encodeUriComponent?

ios - Xcode 和安装的 SF Pro Display(Apple 字体)

objective-c - 加密核心数据条目

ios - NSJSONSerialization 不更新(可能被缓存)

ios - 使用 MPNowPlayingInfoCenter 处理 CarPlay 中的播放事件

swift - 保存多个带有核心数据的异步上下文,数据丢失

ios - Swift iOS - 视觉框架文本识别和矩形

ios - 如何通过平移手势旋转 SCNSphere/Node

java - 具有 '/' 的路径参数的 URL 编码问题