使用 String addedPercentEncoding 将字符串编码为查询参数

Posted

技术标签:

【中文标题】使用 String addedPercentEncoding 将字符串编码为查询参数【英文标题】:Using String addingPercentEncoding to encode a string as query param 【发布时间】:2020-10-08 01:26:15 【问题描述】:

我有一个输入字符串“+20”,我试图将其作为查询参数传递给 url。

所以我试图通过这样做来对 myInputString 进行编码

let s1 = myInputString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)

但在调试器中,字符串 s1 仍然显示为 '+20' 而不是 '%2B20'

是不是我做错了什么?

【问题讨论】:

+ 是合法的 URL 字符。它不需要编码。 【参考方案1】:

正如 matt 已经提到的,+ 是一个合法的 URL 字符。如果您确实需要对其进行编码,则需要创建自己的自定义 urlQueryAllowed 并从中减去加号:

extension CharacterSet 
    static let allowedCharacters = urlQueryAllowed.subtracting(.init(charactersIn: "+"))


let myInputString = "+20"
let s1 = myInputString.addingPercentEncoding(withAllowedCharacters: .allowedCharacters)  // "%2B20"

【讨论】:

谢谢。你能帮我理解为什么'+'是一个有效的字符吗?当我去w3schools.com/tags/ref_urlencode.ASP,输入1+20,然后'Url encoded',我得到1%2B20 +URL 中也表示空格。

以上是关于使用 String addedPercentEncoding 将字符串编码为查询参数的主要内容,如果未能解决你的问题,请参考以下文章

cv::String 和 std::string:啥时候使用哪一个以及两者都使用的必要性?

[][]string 与包含 []string 的结构的内存使用情况

无法使用“Int”类型的索引为“[String : String]”类型的值下标

string eregi_replace(string pattern, string replacement, string string);的使用

如何使用 LINQ Contains(string[]) 而不是 Contains(string)

三种String的转换 String.valueOf String强转 toString使用区别