首页 > 解决方案 > 对字符串进行编码,以便将其发送到 Twitter

问题描述

我有一个可以包含任何字符的字符串,从字母数字到特殊字符,如“&,.:/!” 等等。我需要对该字符串进行编码并将其发送到 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 将收到“我在这里”。我怎样才能解决这个问题?

标签: iosswift

解决方案


正如亚历山大所建议的,最可靠的方法是使用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)
    }
}

推荐阅读