Swift-编码URL

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

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-编码URL 的全部内容, 来源链接: utcz.com/qa/402131.html

回到顶部