ios - 对字符串进行编码,以便将其发送到 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 将收到“我在这里”。我怎样才能解决这个问题?
解决方案
正如亚历山大所建议的,最可靠的方法是使用URLComponents
和URLQueryItem
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)
}
}
推荐阅读
- azure - ADWtest 需要访问组织中只有管理员才能授予的资源的权限
- odoo - Odoo:从 one2many 字段中的添加行打开完整的模型页面
- java - 关于字符变量的增量
- python - 在opencv的findContours中,cv.RETR_FLOODFILL是做什么的?
- powershell - 使用 PowerShell 执行可能位于两个不同位置的文件
- python - python - kivy:从另一个类调用函数
- java - Spring - Json 对象将值作为数组发送并且不显示字段名称
- python - 确保文件夹存在并且如果不递归创建它的最短python oneliner是什么?
- tizen - 我们如何在 Tizen Web Widget Project 中引用外部源文件?
- java - 将数据存储在“REALM DATABASE”中并在回收站视图中显示