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

Swift 5如何实现仅对所有特殊字符执行百分号编码且不编码字母数字

特殊字符全量百分号编码实现方案

核心思路

系统预设的urlQueryAllowed/urlHostAllowed等URL相关字符集,会默认放行大量URL规范中允许的特殊字符,不符合你要求的除字母数字外所有字符全部编码的需求,直接自定义仅包含字母数字的允许字符集即可。

实现代码

import UIKit

extension String {
    /// 仅保留字母数字,其余所有字符全部做百分号编码
    var encodeAllSpecialCharacters: String? {
        let allowedCharacters = CharacterSet.alphanumerics
        return self.addingPercentEncoding(withAllowedCharacters: allowedCharacters)
    }
}

// 测试用例
let original = "Test@123!#$%^&*()~-_=+;:'/.,<>{}[]"
if let encoded = original.encodeAllSpecialCharacters {
    print("编码结果:\(encoded)")
}

运行输出

编码结果:Test%40123%21%23%24%25%5E%26%2A%28%29%7E%2D%5F%3D%2B%3B%3A%27%2F%2E%2C%3C%3E%7B%7D%5B%5D

可以看到你提到的*()~-_=+;:'/.,等所有特殊字符都已完成百分号编码,仅字母和数字保留原格式。

原尝试失败原因

你之前使用的系统预设URL字符集,是为URL不同组成部分设计的,会默认保留该部分允许出现的特殊字符不编码,比如urlQueryAllowed会放行@、&、*等在查询参数中允许存在的字符,因此无法实现全量特殊字符编码的需求。

内容的提问来源于stack exchange,提问作者user

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:39:04