快速接受所有特殊字符的String的URL编码 [英] URL Encoding of String accepting all special characters in swift

查看:273
本文介绍了快速接受所有特殊字符的String的URL编码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试使用以下代码对添加了特殊字符的字符串进行编码:

Trying to encode string added with special characters with below code:

let encodedString = myString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)

其中不包含所有特殊字符.

which does not include all special characters.

还尝试了以下选项:

  • .urlHostAllowed
  • .urlFragmentAllowed
  • .urlPasswordAllowed
  • .urlPathAllowed
  • .urlUserAllowed
  • .urlQueryAllowed

但是它不起作用.

请告诉我URL编码是否还有其他方法可以包含所有特殊字符.

Please tell me if there is any other approach for URL encoding to include all special characters.

修改

在字符串中添加:作为输入,它将转换为%3A. @-%40的方法相同.

Adding : as input in string it converts to %3A. Same way for @ - %40.

但是添加&仍然相同.必需的输出是%26.

But adding & remains same. Required output is %26.

推荐答案

感谢@MartinR和@benleggiero:

Thank you @MartinR and @benleggiero for : How do I URL encode a string

很有帮助.

它不包括所有特殊字符.

It was not including all special characters.

一个接一个地检查并添加以下丢失的内容:

Checked one by one and added those which were missing as below:

extension CharacterSet {

    public static let urlQueryParameterAllowed = CharacterSet.urlQueryAllowed.subtracting(CharacterSet(charactersIn: "&?~!$*(.,)_-+':"))

    public static let urlQueryDenied           = CharacterSet.urlQueryAllowed.inverted()
    public static let urlQueryKeyValueDenied   = CharacterSet.urlQueryParameterAllowed.inverted()
    public static let urlPathDenied            = CharacterSet.urlPathAllowed.inverted()
    public static let urlFragmentDenied        = CharacterSet.urlFragmentAllowed.inverted()
    public static let urlHostDenied            = CharacterSet.urlHostAllowed.inverted()

    public static let urlDenied                = CharacterSet.urlQueryDenied
        .union(.urlQueryKeyValueDenied)
        .union(.urlPathDenied)
        .union(.urlFragmentDenied)
        .union(.urlHostDenied)


    public func inverted() -> CharacterSet {
        var copy = self
        copy.invert()
        return copy
    }
}

这篇关于快速接受所有特殊字符的String的URL编码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆