Ios 不能';t在URL+中编码加号字符;敏捷的
我使用的是GET方法,我必须在URL中传递电子邮件地址。API希望对其进行编码。我尝试使用编码选项,但无法对“+”字符进行编码 我尝试了以下代码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?
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,但加号不需要转义。