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
相关产品推荐
相关产品推荐

