iOS 密码中有特殊的字符IOS如何处理 IOS中URL包含中文参数的问题

本文深入探讨了iOS环境下URL编码的重要性,并通过实例展示了如何正确处理包含中文及特殊字符的URL,确保参数传递的安全性和准确性。重点介绍了自定义URL编码函数的实现方法,以解决传统编码方式存在的局限性。

 

由于url支持26个英文字母、数字和少数几个特殊字符,因此,对于url中包含非标准url的字符时,就需要对其进行编码。iOS中提供了函数stringByAddingPercentEscapesUsingEncoding对中文和一些特殊字符进行编码,但是stringByAddingPercentEscapesUsingEncoding的功能并不完善,对一些较为特殊的字符无效。

 

NSString中如果包括中文字符的话转换为NSURL得到的值为nil,用stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding可以解决,代码如下:

NSString *str= [NSString stringWithUTF8String:surl.c_str()];

   str= @"http://218.21.213.10/MobileOA/TIFF/鄂安办发45号关于下达2012年全市安全生产相对控制指标的通知1.jpg";

   str= [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

   NSURL*imageUrl = [NSURL URLWithString:str];

 

   UIImage*image = [UIImage imageWithData:[NSData dataWithContentsOfURL:imageUrl]]; 

中间如果不加 str = [strstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];这一行则imageUrlnil

 

比如请求"http://m.xxx.com/login.action?username=liyong&psw=&123&time=20120723"这样的url请求时,其中的密码部分因为包含特殊字符“&123”,所以会被url认为是分割参数的标志,参数会被错误的分割如下:

usernameliyongpsw=空,123=空,time=20120723

 

解决办法:

 

因此,如果想正确的传递带有特殊字符的密码,需要对密码做如下处理:                               

 

password =(NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,(CFStringRef)password,NULL,(CFStringRef)@"!*'();:@&=+$,/?%#[]",kCFStringEncodingUTF8);

 

注意:这样的encoding只能对params的内容,不要对整个url这样做。

这个时候密码就是“&123”了,因为“&”被转译成了“&”,这样就可以传递带特殊字符的密码了。

 

注:我用的是ASIHttpRequest

 

我们对其进行封装,提供一个完善的url编码函数。

 

NSString*encodeURL(NSString* dString ){ NSString*escapedUrlString= (NSString*)CFURLCreateStringByAddingPercentEscapes(NULL,(CFStringRef)dString,NULL,(CFStringRef)@"!*'();:@&=+$,/?%#[]", kCFStringEncodingUTF8); escapedUrlString = [escapedUrlStringstringByAddingPercentEscapesUsingEncoding:kCFStringEncodingUTF8];

return[escapedUrlString autorelease]; }

 

需要特别注意的是encodeURL只能用来对url中的component编码,不能用来对整个url进行编码

(转自:http://blog.youkuaiyun.com/catandrat111/article/details/8533817,感谢作者)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值