URL构造函数不适用于某些字符

时间:2018-05-22 11:46:08

标签: swift url encoding

我正在尝试使用URLRequest从我的应用程序调用php脚本。 Url路径在String-Variable query中生成,对于请求,我将其转换为

    guard let url = URL(string: query) else {
        print("error")
        return
    }

通常它可以工作,但是当请求包含ä,ö,ü,ß等字符时,会触发错误。我怎样才能使它发挥作用?

2 个答案:

答案 0 :(得分:0)

URL(string:)初始值设定项不会将String编码为有效网址String,它假定String已经编码为仅包含URL中有效的字符。因此,如果String包含无效的URL字符,则必须进行编码。您可以致电String.addingPercentEncoding(withAllowedCharacters:)

来实现这一目标
let unencodedUrlString = "áűáeqw"
guard let encodedUrlString = unencodedUrlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed), let url = URL(string: encodedUrlString) else { return }

您可以更改CharacterSet,具体取决于您的网址中包含需要编码的字符,我只是使用urlQueryAllowed进行演示。

答案 1 :(得分:0)

将您的网址分为两部分:

let baseURLString = "https://www.example.com"
let pathComponent = "áűáeqw"
let fullURL = URL(string: baseURLString)?.appendingPathComponent(pathComponent)