我正在使用 GET 方法,在该方法中我必须在 URL 中传递电子邮件地址。 API 期望它被编码。我尝试了编码选项,但无法对“+”字符进行编码。
我尝试了以下代码
let encodedEmail = emailAddressTxt.text!.addingPercentEncoding(withAllowedCharacters:.urlHostAllowed)
let urlString = "http://www.example.com/User/GetUserDetailsByEmailAddress?EmailAddress=\(encodedEmail!)"
print(escapedString)
它打印http://www.example.com/User/GetUserDetailsByEmailAddress?EmailAddress=mano+1%40gmail.com
其中“@”字符仅被编码而“+”未被编码。
最佳答案
不幸的是,CharacterSet.urlHostAllowed
和 CharacterSet.urlQueryAllowed
都包含 +
作为允许。由于历史原因,大多数网络服务器将 +
视为空格 () 的替代品,因此您需要对
+
进行转义。
为此,您可能需要定义自己的CharacterSet
:
extension CharacterSet {
static let rfc3986Unreserved = CharacterSet(charactersIn: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~")
}
let emailAddressText = "mano+1@gmail.com"
let encodedEmail = emailAddressText.addingPercentEncoding(withAllowedCharacters:.rfc3986Unreserved)
print(encodedEmail!) //->mano%2B1%40gmail.com
关于ios - 无法在 URL + swift 中编码加号字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41561853/