ios - 无法在 URL + swift 中编码加号字符

标签 ios swift url encoding

我正在使用 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.urlHostAllowedCharacterSet.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/

相关文章:

带a标签的javascript变量(字符串构建)

ios - Swift 字符串的范围运算符(..< 和 ...)

swift - 在完成处理程序中存储值 - Swift

ios - 快速返回一个带有可选Element的泛型函数中的未包装Element?

ios - CIDetector : CIFaceFeature with always zero bounds

string - swift 2 : Iterating and upper/lower case some characters

javascript - 从当前 URL 获取#id

url - python中的gzip url请求

ios - 错误 : Assigning non-escaping parameter 'publicationQuery' to an @escaping closure

objective-c - 键盘更改时是否会发送任何通知(例如从 NumberPad 到 Default)