iOS中的 URL的encode

本文详细介绍了Objective-C中用于URL编码的ASIFormDataRequest类及其内部实现方法,并提供了使用示例。

原文地址 http://unmi.cc/objective-c-urlencode/


文中提到的两个方法

ASIFormDataRequest中的 方法


- (NSString*)encodeURL:(NSString *)string
{
    NSString *newString = [NSMakeCollectable(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)string, NULL, CFSTR(":/?#[]@!$ &'()*+,;=\"<>%{}|\\^~`"), CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding))) autorelease];
    if (newString) {
        return newString;
    }
    return @"";
}

方法2: CFURLCreateStringByAddingPercentEscapes

NSString的category
- (NSString *)URLEncodedString{
        return (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef) self, NULL, CFSTR("=,!$&'()*+;@?\n\"<>#\t :/"), kCFStringEncodingUTF8);
}
<think>我们正在讨论企业微信的textcard消息类型。用户的问题是:是否可以直接使用URLScheme作为textcard消息的跳转链接(即`link_url`字段)?根据企业微信官方文档,textcard消息的`link_url`字段通常用于网页跳转。但是,企业微信也支持使用自定义的URLScheme来跳转到小程序。关键点:1.企业微信的textcard消息允许使用URLScheme作为跳转链接,只要该URLScheme是企业微信所支持的格式。2.企业微信的URLScheme格式为:`wxwork://app/<企业ID>/<小程序AppID>?path=<页面路径>&query=<参数>`3.当用户在企业微信客户端内点击textcard消息时,如果`link_url`是一个企业微信支持的URLScheme(如跳转小程序的Scheme),则会执行相应的跳转动作。因此,答案是肯定的:可以直接将构造好的URLScheme字符串作为textcard消息的`link_url`。注意事项:-企业微信客户端版本要求:iOS需要3.1.0及以上,Android需要3.1.2及以上。低于这些版本的客户端将无法识别该Scheme,可能会导致跳转失败。-URLScheme的长度限制:整个URLScheme的长度不能超过2048字节(包括所有参数)。-参数编码:需要确保路径和参数都经过正确的URL编码。示例代码(Java):假设我们已经构造好了URLScheme字符串:```javaStringurlScheme="wxwork://app/wwd8c0a00000000000/wx1234567890abcdef?path=pages%2Fhome%2Findex&query=userid%3DUSER001";```然后将其设置到textcard消息模板的`link_url`字段:```javaWeComMessageTemplatetemplate=newWeComMessageTemplate();template.setMsgType("textcard");template.setTitle("订单通知");template.setDescription("您有新订单待处理,点击查看详情");template.setLinkUrl(urlScheme);//直接使用URLScheme```这样,当用户点击消息卡片时,如果客户端版本支持,就会跳转到指定的小程序页面。对于旧版客户端不支持的情况,我们可以采用备选方案(例如通过网页中转)来兼容,但这不是本问题的重点。因此,针对用户的问题:可以直接使用。引用企业微信官方文档作为参考[^1]。§§相关问题§§1.如果企业微信客户端版本过低不支持URLScheme,有什么备选方案?2.如何检测用户的企业微信客户端版本,以便决定是否使用URLScheme跳转?3.在textcard消息中使用URLScheme跳转小程序,有哪些常见的错误原因?</think>### 企业微信 textcard 消息直接使用 URL Scheme 的解答 **可以直接使用 URL Scheme 作为 textcard 的跳转地址** ✅,但需满足以下条件和注意事项: #### ✅ 支持情况 1. **官方支持** 企业微信官方文档明确允许在 textcard 的 `link_url` 字段中使用 URL Scheme 格式[^1]: ```plaintext wxwork://app/<企业ID>/<小程序AppID>?path=页面路径&query=参数 ``` 2. **客户端版本要求** - iOS 企业微信 ≥ 3.1.0 - Android 企业微信 ≥ 3.1.2 #### ⚠️ 使用规范 1. **参数编码要求** `path` 和 `query` 参数必须进行 **URL 编码**: ```java String encodedPath = URLEncoder.encode("pages/home/index", "UTF-8"); String urlScheme = "wxwork://app/wwd8c0a00000000000/wx1234567890abcdef?path=" + encodedPath; ``` 2. **长度限制** 整个 URL Scheme 长度 ≤ 2048 字节(包括协议头和企业ID等) 3. **消息体配置示例**(Java) ```java WeComMessageTemplate template = new WeComMessageTemplate(); template.setMsgType("textcard"); template.setTitle("订单提醒"); template.setDescription("点击处理待办订单"); template.setLinkUrl("wxwork://app/wwd8c0a00000000000/wx1234567890abcdef?path=pages%2Forder%2Fdetail&orderId=10086"); ``` #### 🛠 验证方法 发送测试消息后,在以下环境验证: 1. 企业微信客户端直接点击应跳转小程序 2. 开发者工具检查小程序 `onLoad` 参数: ```javascript onLoad(options) { console.log(options.path); // 输出: pages/order/detail console.log(options.orderId); // 输出: 10086 } ``` #### ⚠️ 常见问题处理 | 问题现象 | 解决方案 | |---------|----------| | 点击无反应 | 检查客户端版本是否达标 | | 跳转错误页面 | 验证 `path` 参数是否正确编码 | | 参数丢失 | 确认 `query` 参数格式符合 `key=value` 规范 | > **最佳实践**:正式使用前在**企业微信沙箱环境**测试跳转流程[^2]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值