【问题标题】:Encoding a string so that it can be sent to twitter [duplicate]对字符串进行编码以便可以将其发送到 Twitter [重复]
【发布时间】:2021-11-01 01:52:56
【问题描述】:

我有一个可以包含任何字符的字符串,从字母数字到特殊字符,如“&,.:/!”等等。我需要对该字符串进行编码并将其发送到 Twitter。我尝试了以下方法,但一旦text 中有& 字符,它就无法正常工作:

static func shareToTwitter(text: String) {
    guard let urlEscaped = text.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {
        return
    }
    guard let url = URL(string: "twitter://post?message=\(urlEscaped)") else {
        return
    }
    if UIApplication.shared.canOpenURL(url) {
        UIApplication.shared.open(url)
    } else {
        guard let twitterUrl = URL(string: "https://twitter.com/intent/tweet?text=\(urlEscaped)") else {
            return
        }
        UIApplication.shared.open(twitterUrl)
    }
}

所以一个例句可能是:“I'm here & there”。相反,Twitter 将收到“我在这里”。我该如何解决这个问题?

【问题讨论】:

标签: ios swift


【解决方案1】:

正如 Alexander 所建议的,最可靠的方法是使用 URLComponentsURLQueryItem

static func shareToTwitter(text: String) {
    var components = URLComponents(string: "twitter://post")!
    components.queryItems = [URLQueryItem(name: "message", value: text)]
    if let url = components.url, UIApplication.shared.canOpenURL(url) {
        UIApplication.shared.open(url)
    } else {
        components = URLComponents(string: "https://twitter.com/intent/tweet")!
        components.queryItems = [URLQueryItem(name: "text", value: text)]
        guard let twitterUrl = components.url else { return }
        UIApplication.shared.open(twitterUrl)
    }
}

【讨论】:

  • UIApplication.shared.canOpenURL(url) 检查是否必要? (我知道 OP 在他们的代码中有它,而你只是保留它,但我正在尝试看看它应该做什么)
  • 坦率地说,我不知道 OP 会完成什么。
  • @Alexander 是的,canOpenURL 是必要的,因为如果用户没有安装 twitter 应用程序,它将无法打开该链接。因此我需要回到网络上。
  • @Tometoyou 哦,我刚刚注意到方案是twitter://。这是有道理的!
猜你喜欢
  • 2023-03-28
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多