Ios 不能';t在URL+中编码加号字符;敏捷的

Ios 不能';t在URL+中编码加号字符;敏捷的,ios,swift,url,encoding,Ios,Swift,Url,Encoding,我使用的是GET方法,我必须在URL中传递电子邮件地址。API希望对其进行编码。我尝试使用编码选项,但无法对“+”字符进行编码 我尝试了以下代码 let encodedEmail = emailAddressTxt.text!.addingPercentEncoding(withAllowedCharacters:.urlHostAllowed) let urlString = "http://www.example.com/User/GetUserDetailsByEmailAddress?

我使用的是GET方法,我必须在URL中传递电子邮件地址。API希望对其进行编码。我尝试使用编码选项,但无法对“+”字符进行编码

我尝试了以下代码

let encodedEmail = emailAddressTxt.text!.addingPercentEncoding(withAllowedCharacters:.urlHostAllowed)

let urlString = "http://www.example.com/User/GetUserDetailsByEmailAddress?EmailAddress=\(encodedEmail!)"

print(escapedString)
它打印

其中“@”字符仅编码而“+”未编码。

请尝试以下操作:

let encodedEmail = emailAddressTxt.text!

        var urlString = "http://yyy.xxx.com/User/GetUserDetailsByEmailAddress?EmailAddress=\(encodedEmail)"
        urlString = urlString.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)

让encodedEmail=emailAddressTxt.text

let urlString = "http://yyy.xxx.com/User/GetUserDetailsByEmailAddress?EmailAddress=\(encodedEmail!)"
urlString = urlString.addingPercentEncoding(withAllowedCharacters:.urlHostAllowed)

print(escapedString)

使用.urlHost时,不编码允许的字符集“+”

向字符串添加扩展名,如下所示

public func stringByAddingPercentEncodingToData() -> String? {
    let finalString = self.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlHostAllowed)?.replacingOccurrences(of: "&", with: "%26").replacingOccurrences(of: "+", with: "%2B")
    return finalString
}

您可以这样做。

不幸的是,
字符集.urlHostAllowed
字符集.urlQueryAllowed
都包含
+
作为允许的。由于历史原因,大多数web服务器将
+
视为空白(
)的替代品,因此您需要转义
+

为此,您可能需要定义自己的
字符集

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

您应该为URL的该部分使用urlQueryAllowed,但加号不需要转义。