在 Swift 中将 Wikipedia url 字符串转换为 URL 的问题

Posted

技术标签:

【中文标题】在 Swift 中将 Wikipedia url 字符串转换为 URL 的问题【英文标题】:Issue with turning Wikipedia url string into URL in Swift 【发布时间】:2020-08-04 19:39:07 【问题描述】:

我创建的 URL 有效,在 Chrome 上测试时会返回所需的 JSON,但在我的项目中失败。

func createWikipediaURL(place: String) -> URL? 
    let _place = place.replacingOccurrences(of: " ", with: "%20")
    let urlStr =
    "https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts|pageimages&exintro&explaintext&generator=search&gsrsearch=intitle:\(_place)&gsrlimit=1&redirects=1"

    if let url = URL(string:urlStr) 
        return url
     else 
        return nil
    

使用参数“Malibu Beach”,该函数将创建正确的 URL,https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts|pageimages&exintro&explaintext&generator=search&gsrsearch=intitle:Malibu%20Beach&gsrlimit=1&redirects=1,但也将导致不返回任何 URL,因为该字符串无法转换为 URL。关于如何将字符串变成 URL 的任何建议?

【问题讨论】:

【参考方案1】:

问题在于urlStr 中的| 字符。我建议使用 Strings addingPercentEncoding 方法来使字符串 url 安全。这样做意味着您也不需要手动替换 place 的空格。

func createWikipediaURL(place: String) -> URL? 
    let urlStr = "https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts|pageimages&exintro&explaintext&generator=search&gsrsearch=intitle:\(place)&gsrlimit=1&redirects=1"

    // Replaces special characters with their percent encoded counter-parts.
    guard let escapedUrlStr = urlStr.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else  return nil 

    // There's no need for an if statement; URL can be returned as-is.
    return URL(string:escapedUrlStr)

【讨论】:

遇到了同样的问题。谢谢!

以上是关于在 Swift 中将 Wikipedia url 字符串转换为 URL 的问题的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift3 中将查询参数添加到 iOS 中的 GET url

在 Swift 中将图像和标题从数组(image_url)迭代和加载到 ViewController 中的正确方法

在 Swift 中将 JSON 加载到 UItableView

在 Swift 中将视频保存在本地(目录)中?

如果url包含中文,如何获取链接swift [复制]

在 Python 中将 Wikipedia 表刮到 CSV