关于URL转义问题

URL包含中文字符的同时,又包含特殊字符,导致的转义错误,使用如下代码解决

   NSString *encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)open,(CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]",NULL,
kCFStringEncodingUTF8));

 

转载于:https://www.cnblogs.com/jztsdwn/p/10967334.html

### URL 转义方法及其实现 URL 转义是一种将特殊字符转换为其对应的编码形式的过程,以便这些字符可以在 URL 中安全传输。如果未正确转义 URL 特殊字符,则可能导致参数丢失或其他异常行为[^1]。 #### 什么是 URL 编码? URL 编码也称为百分号编码(Percent-Encoding),它通过替换特殊字符为 `%` 加上两位十六进制数的形式来表示不可见或保留的字符。例如,空格会被编码为 `%20`,而 `&` 则被编码为 `%26`[^4]。 #### 实现 URL 编码的方式 以下是几种常见编程语言中实现 URL 编码的方法: ##### Python 实现 URL 编码 Python 提供了内置库 `urllib.parse.quote()` 来完成 URL 的编码操作。 ```python from urllib.parse import quote url = "https://example.com/search?name=John Doe&age=30" encoded_url = quote(url, safe=':/?=&') print(encoded_url) ``` 上述代码中,`quote` 函数会对除指定的安全字符外的所有字符进行编码。这里的 `safe=':/?=&'` 参数指定了不需要编码的字符集合。 ##### JavaScript 实现 URL 编码 JavaScript 使用 `encodeURIComponent` 方法对 URI 组件进行编码。 ```javascript const url = "https://example.com/search?name=John Doe&age=30"; const encodedUrl = encodeURIComponent(url); console.log(encodedUrl); ``` 此函数会自动处理大多数需要转义的情况,并返回经过编码后的字符串。 ##### Java 实现 URL 编码 Java 可以利用 `java.net.URLEncoder.encode(String s, String enc)` 方法来进行 URL 编码。 ```java import java.io.UnsupportedEncodingException; import java.net.URLEncoder; public class Main { public static void main(String[] args) throws UnsupportedEncodingException { String data = "name=John Doe&age=30"; String encodedData = URLEncoder.encode(data, "UTF-8"); System.out.println(encodedData); } } ``` 注意,在调用该方法时需显式声明使用的字符集,默认推荐 UTF-8。 #### 处理 Base64 编码在 URL 中的应用 当涉及到复杂数据结构如图片文件上传至服务器并通过链接访问时,可能需要用到 Base64 编码配合 URL 安全模式。此时应考虑使用专门针对 URL 场景优化过的变体——Base64URL[^2]。相比标准版移除了 `/` 和 `+` 符号冲突风险的同时还替换了填充符 `=`。 #### 修改服务端逻辑作为备选方案 对于某些无法控制客户端发送过来的数据情况下的问题修复手段之一便是调整后台接收方式。比如从依赖于单独字段提取转变为整体抓取 QueryString 后自行拆分解析从而规避部分因默认机制引发的问题[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值