【问题标题】:Swift Encode Custom String to populate URL [duplicate]Swift 编码自定义字符串以填充 URL [重复]
【发布时间】:2021-05-16 22:46:30
【问题描述】:

我有一个URL,它可以像这样接受任何String

https://test@api.search?query=\(productSearchString)&limit=1

现在我的问题是这适用于例如“iphone”,但它会因“iphone 12”而崩溃​​。 我试过这样编码:

guard let escapedResourceString = resourceString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) else { return  }

但这在我的情况下似乎不起作用,因为它返回了一个不正确的URL,我无法与我的 API 一起使用。

我该如何解决这个问题,以便用户可以输入任何他想要的内容,但应该创建 URL 并且我的 API 应该能够使用它。

如果您需要更多信息,请告诉我。

【问题讨论】:

    标签: ios swift string url encoding


    【解决方案1】:

    您的参数需要进行 url 编码。

    您可以使用URLComponents 创建您的URL 并将您的参数作为URLQueryItem 实例传递,如下所示:

    let productSearchString = "iphone 12"
    var urlComponents = URLComponents(string: "https://test@api.search")
    urlComponents?.queryItems = [
        URLQueryItem(name: "query", value: productSearchString),
        URLQueryItem(name: "limit", value: "1")
    ]
    let url = urlComponents?.url
    
    print(url?.absoluteString ?? "nil") // https://test@api.search?query=iphone%2012&limit=1
    

    【讨论】:

    • 我更新了我的问题,在我的情况下,String 实际上不是在最后,而是在中间。您的答案仍然适用吗?你的代码到底在做什么?
    • limit=1 只是一个例子,实际上背后可能有任何东西,更多参数取决于我的情况:D 抱歉,如果我没有说清楚..跨度>
    • 难道没有一种简单的方法可以encode 我的searchString 并简单地用它填充我的实际URL 吗?
    • @Chris 要自己编写 url,您需要多次运行 addingPercentEncoding(withAllowedCharacters:) 函数传递 .urlQueryAllowed 作为每个参数值的允许字符集。我认为URLComponents 要容易得多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 2011-05-27
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    相关资源
    最近更新 更多