【问题标题】:How to encode ''+' character in url string?如何在 url 字符串中编码 ''+' 字符?
【发布时间】:2017-01-17 12:50:25
【问题描述】:

我想在我的 url 字符串中编码 + 字符,我尝试这样做:

let urlString = "www.google.com?type=c++"

let result = string.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)

但这不适用于 +

有什么想法吗?谢谢。

更新:

此外,url 中的 type= 参数是动态的,我不会对 + 字符进行一些隐式替换。这个type= 参数代表一个UITextField 值,所以可以输入任何内容。

我也很好奇为什么addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) 在这种特殊情况下不起作用?

【问题讨论】:

  • 你能用 urlString.replaceOccourences(of: "+", with:"") 吗?
  • 请查看this
  • 请阅读更新。在这种情况下我不会替换字符
  • 这行不通,因为+url query string 的完全有效字符,它是url encoded 版本的[space]
  • 好的,谢谢你的回答:)

标签: ios swift url swift3


【解决方案1】:
let allowedCharacterSet = CharacterSet(charactersIn: "!*'();:@&=+$,/?%#[] ").inverted

if let escapedString = "www.google.com?type=c++".addingPercentEncoding(withAllowedCharacters: allowedCharacterSet) {
  print(escapedString)
}

输出:

www.google.com%3Ftype%3Dc%2B%2B

【讨论】:

  • 是的,你的方法足够好(不理想),但我很好奇为什么addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) 不起作用......
  • 这是我无法回答的问题,他们可能出于某种充分的理由没有添加+
【解决方案2】:

将 + 替换为 %2B

let urlString = "www.google.com?type=c++"
let newUrlString = aString.replacingOccurrences(of: "+", with: "%2B")

【讨论】:

  • 你的方法是我最不想做的事情
【解决方案3】:

斯威夫特 5

使用扩展并将加号添加到不允许的字符中,这样您就可以创建自己的字符集并在需要的任何地方重复使用它。 :

extension CharacterSet {
    
    /// Characters valid in part of a URL.
    ///
    /// This set is useful for checking for Unicode characters that need to be percent encoded before performing a validity check on individual URL components.
    static var urlAllowedCharacters: CharacterSet {
        // You can extend any character set you want
        var characters = CharacterSet.urlQueryAllowed
        characters.subtract(CharacterSet(charactersIn: "+"))
        return characters
    }
}

用法:

let urlString = "www.google.com?type=c++"

let result = urlString.addingPercentEncoding(withAllowedCharacters: .urlAllowedCharacters)

我找到了一个包含用于 url 编码的字符集的列表。 以下是有用的(反转的)字符集:

URLFragmentAllowedCharacterSet  "#%<>[\]^`{|}
URLHostAllowedCharacterSet      "#%/<>?@\^`{|}
URLPasswordAllowedCharacterSet  "#%/:<>?@[\]^`{|}
URLPathAllowedCharacterSet      "#%;<>?[\]^`{|}
URLQueryAllowedCharacterSet     "#%<>[\]^`{|}
URLUserAllowedCharacterSet      "#%/:<>?@[\]^`

来源:https://stackoverflow.com/a/24552028/8642838

【讨论】:

    猜你喜欢
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 2014-02-19
    • 2017-11-20
    • 1970-01-01
    • 2010-11-06
    相关资源
    最近更新 更多