URL 字符串编码接受 swift 中的所有特殊字符
URL Encoding of String accepting all special characters in swift
正在尝试使用以下代码对添加了特殊字符的字符串进行编码:
let encodedString = myString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
不包括所有特殊字符。
还尝试了以下选项:
- .urlHostAllowed
- .urlFragmentAllowed
- .urlPasswordAllowed
- .urlPathAllowed
- .urlUserAllowed
- .urlQueryAllowed
但它不起作用。
请告诉我是否有任何其他方法 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
}
}
正在尝试使用以下代码对添加了特殊字符的字符串进行编码:
let encodedString = myString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
不包括所有特殊字符。
还尝试了以下选项:
- .urlHostAllowed
- .urlFragmentAllowed
- .urlPasswordAllowed
- .urlPathAllowed
- .urlUserAllowed
- .urlQueryAllowed
但它不起作用。
请告诉我是否有任何其他方法 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
}
}