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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了密码中有特殊的字符IOS如何处理 IOS中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 = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];这一行则imageUrl为nil

 

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

username=liyong,psw=空,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 = [escapedUrlString stringByAddingPercentEscapesUsingEncoding:kCFStringEncodingUTF8];
  return [escapedUrlString autorelease]; }

 

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

以上是关于密码中有特殊的字符IOS如何处理 IOS中URL包含中文参数的问题的主要内容,如果未能解决你的问题,请参考以下文章

Oracle用户密码含有特殊字符应当如何处理

[IT学习]Python如何处理异常特殊字符

如何处理离线同步中的核心数据关系 - Azure 移动服务 iOS

ubuntu忘记管理员密码如何处理?

如何处理 XML 中 URL 中的特殊字符

使用 SAX 解析 XML |如何处理特殊字符?