iOS实现Twitter分享如何编码字符串 解决&字符导致内容截断问题
问题原因
你当前使用的CharacterSet.urlQueryAllowed是URL查询部分的整体允许字符集,其中包含了&、=这类查询参数的保留分隔符,所以这些字符不会被百分号编码。当Twitter接口解析URL时,会把&识别为新查询参数的起始位,因此&之后的内容都会被截断丢弃。
修复方案
自定义查询参数值专用的允许字符集,从原有的urlQueryAllowed中移除所有参数分隔类保留字符,再用这个自定义字符集做百分号编码即可。
修改后完整代码
static func shareToTwitter(text: String) { // 自定义参数值允许字符集,移除查询参数保留的分隔字符 var allowedCharacters = CharacterSet.urlQueryAllowed allowedCharacters.remove(charactersIn: "&=+?#@/") guard let urlEscaped = text.addingPercentEncoding(withAllowedCharacters: allowedCharacters) 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时,其中的&会被编码为%26,不会被识别为参数分隔符,Twitter可以完整接收全部文本内容。
内容的提问来源于stack exchange,提问作者Tometoyou
相关产品推荐
相关产品推荐

