You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:21:03