“iOS”的正确URL编码是什么+&引用;性格

“iOS”的正确URL编码是什么+&引用;性格,ios,objective-c,swift,Ios,Objective C,Swift,是否真的没有一种方法可以对包含“+”字符的查询字符串参数的值进行本地URL编码 e、 g me+blah@domain.net 到 me%2Bblah%40@domain.net 我尝试了其他问题中的解决方案,但这些问题并没有正确地对电子邮件进行编码 最好采用swift解决方案,因为这是我目前正在从事的工作,但我能够将Objective-C代码大部分转换为swift代码 具体地说,我正在尝试对POST请求主体中的查询字符串值进行编码 let email = "me+blah@domain.n

是否真的没有一种方法可以对包含“+”字符的查询字符串参数的值进行本地URL编码

e、 g

me+blah@domain.net

me%2Bblah%40@domain.net

我尝试了其他问题中的解决方案,但这些问题并没有正确地对电子邮件进行编码

最好采用swift解决方案,因为这是我目前正在从事的工作,但我能够将Objective-C代码大部分转换为swift代码

具体地说,我正在尝试对POST请求主体中的查询字符串值进行编码

let email = "me+blah@domain.net"

let output = CFURLCreateStringByAddingPercentEscapes(nil, email as NSString, nil, ":/?@!$&'()*+,;=" as NSString, CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding))

// output = "me%2Bblah%40domain.net"
CFURLCreateStringByAddingPercentEscapes
在默认情况下不会转义
+
@
,但您可以指定它(就像我在
中与其他字符一样):/?@!$&'()*+,;=“
字符串)


编辑:如果希望
输出成为一个Swift字符串:

let output = (CFURLCreateStringByAddingPercentEscapes(nil, email as NSString, nil, ":/?@!$&'()*+,;=" as NSString, CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding)) as NSString) as String
println((“我+blah@domain.net“作为字符串)
.stringByAddingPercentEncodingWithAllowedCharacters(
NSCharacterSet.alphanumericCharacterSet())
输出:

可选(“me%2Bblah%40domain%2Enet”)
在目标C中:

NSString*encodedString=
[“我+blah@domain.net“stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet alphanumericCharacterSet];

指定字符串/URL当前的编码方式(包括应用这些编码的步骤),因为上下文对于
+
应该、不应该和可能进行百分比编码非常重要。“正确的编码”是由这些规则定义的,在iOS之外(很久以前)。@user2864740我不确定我是否理解,我给出了一个输入和所需输出的示例。目前,“+”字符未使用其他stackoverflow问题中提供的任何解决方案进行编码。(我假设您的意思是将
me%2Bblah%40domain.net
作为所需的输出,而不是
me%2Bblah%40@domain.net
正如您实际键入的一样。)您是对的,我有一个打字错误,现在已修复。我会尝试一下。嗯,这会返回一个
CFString
,显然不希望被哄骗成一个Swift
字符串,因为
CFString
不是
NSString
。有什么想法吗?但是当内容类型为
x-www-form-urlencoded
时,不应该对句点进行编码。您可以向字符集添加更多字符,但这真的值得吗?周期将被正确解码。允许您编码的字符数超过编码所需的字符数。