URL 字符串编码接受 swift 中的所有特殊字符

URL Encoding of String accepting all special characters in swift

正在尝试使用以下代码对添加了特殊字符的字符串进行编码:

let encodedString = myString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)

不包括所有特殊字符。

还尝试了以下选项:

但它不起作用。

请告诉我是否有任何其他方法 URL 编码以包含所有特殊字符。

编辑

添加 : 作为字符串的输入,它会转换为 %3A@ - %40.

的方式相同

但添加 & 保持不变。要求的输出是 %26.

感谢@MartinR 和@benleggiero:How do I URL encode a string

帮助很大。

它不包括所有特殊字符。

一一检查并补充如下:

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
    }
}