快速接受所有特殊字符的String的URL编码 [英] URL Encoding of String accepting all special characters in swift
问题描述
尝试使用以下代码对添加了特殊字符的字符串进行编码:
Trying to encode string added with special characters with below code:
let encodedString = myString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
其中不包含所有特殊字符.
which does not include all special characters.
还尝试了以下选项:
- .urlHostAllowed
- .urlFragmentAllowed
- .urlPasswordAllowed
- .urlPathAllowed
- .urlUserAllowed
- .urlQueryAllowed
但是它不起作用.
请告诉我URL编码是否还有其他方法可以包含所有特殊字符.
Please tell me if there is any other approach for URL encoding to include all special characters.
修改
在字符串中添加:
作为输入,它将转换为%3A
. @
-%40
的方法相同.
Adding :
as input in string it converts to %3A
. Same way for @
- %40
.
但是添加&
仍然相同.必需的输出是%26
.
But adding &
remains same. Required output is %26
.
推荐答案
Thank you @MartinR and @benleggiero for : How do I URL encode a string
很有帮助.
它不包括所有特殊字符.
It was not including all special characters.
一个接一个地检查并添加以下丢失的内容:
Checked one by one and added those which were missing as below:
extension CharacterSet {
public static let urlQueryParameterAllowed = CharacterSet.urlQueryAllowed.subtracting(CharacterSet(charactersIn: "&?~!$*(.,)_-+':"))
public static let urlQueryDenied = CharacterSet.urlQueryAllowed.inverted()
public static let urlQueryKeyValueDenied = CharacterSet.urlQueryParameterAllowed.inverted()
public static let urlPathDenied = CharacterSet.urlPathAllowed.inverted()
public static let urlFragmentDenied = CharacterSet.urlFragmentAllowed.inverted()
public static let urlHostDenied = CharacterSet.urlHostAllowed.inverted()
public static let urlDenied = CharacterSet.urlQueryDenied
.union(.urlQueryKeyValueDenied)
.union(.urlPathDenied)
.union(.urlFragmentDenied)
.union(.urlHostDenied)
public func inverted() -> CharacterSet {
var copy = self
copy.invert()
return copy
}
}
这篇关于快速接受所有特殊字符的String的URL编码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!