Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 安全地发送base64编码字符串作为查询参数_Swift_Base64_Urlencode - Fatal编程技术网

Swift 安全地发送base64编码字符串作为查询参数

Swift 安全地发送base64编码字符串作为查询参数,swift,base64,urlencode,Swift,Base64,Urlencode,在我的应用程序中,我需要向服务器发送一个base64编码字符串作为查询参数,例如 &data=AwGZnyx+JUi0PFJoyYSEDpgtlrxP(cut...)== 问题是,当我的字符串中没有加号时,任何东西都可以正常工作:另一方面,每次有加号时,服务器代码的行为都不正确 我注意到有转义函数(例如,addingPercentEncoding),但它们不能使用加号 除了“手动”(如使用正则表达式)删除所有加号外,我还能做什么 目前,如果我使用: string.replacingOc

在我的应用程序中,我需要向服务器发送一个base64编码字符串作为查询参数,例如

&data=AwGZnyx+JUi0PFJoyYSEDpgtlrxP(cut...)==
问题是,当我的字符串中没有加号时,任何东西都可以正常工作:另一方面,每次有加号时,服务器代码的行为都不正确

我注意到有转义函数(例如,
addingPercentEncoding
),但它们不能使用加号

除了“手动”(如使用正则表达式)删除所有加号外,我还能做什么

目前,如果我使用:

string.replacingOccurrences(of: "+", with: "%2B")

服务器可能将
+
符号解释为空格,因为它通常在查询参数中用作空格的替代品
addPercentEncoding
对您没有帮助,因为它只翻译非ASCII字符

您需要手动将
+
替换为
%2B

。。。。虽然

NSString
的一个版本也将
字符集
作为参数。因此,您可以创建一个字符集,其中包含除
+
之外的所有base64字符


构造URL的一个好方法是使用
URLComponents
。这几乎适用于所有情况,示例如下所示:

let base64 = "AwGZnyx+JUi0PFJoyYSEDpgtlrxP(cut...)=="
var components = URLComponents(string: "https://example.com")
components?.queryItems = [ URLQueryItem(name: "data", value: "AwGZnyx+JUi0PFJoyYSEDpgtlrxP(cut...)==") ]

let url = components?.url
结果:

但是,在您的特定情况下,服务器似乎没有正确处理
+
,您需要解决与上面类似的问题。更好的修复方法是更改服务器以正确处理URL

let base64 = "AwGZnyx+JUi0PFJoyYSEDpgtlrxP(cut...)=="
var components = URLComponents(string: "https://example.com")
components?.queryItems = [ URLQueryItem(name: "data", value: base64) ]

let urlString = components?.string.replacingOccurrences(of: "+", with: "%2B")
结果:


@3000还有另一种可能更好的方法,请参阅更新的答案。我唯一的疑问是:如何包含/排除+?看起来你可以添加符号,而不是单个符号(但当然我可能错了)@3000用
let base64 = "AwGZnyx+JUi0PFJoyYSEDpgtlrxP(cut...)=="
var components = URLComponents(string: "https://example.com")
components?.queryItems = [ URLQueryItem(name: "data", value: base64) ]

let urlString = components?.string.replacingOccurrences(of: "+", with: "%2B")