美文网首页
http请求中字符转义

http请求中字符转义

作者: shopping627 | 来源:发表于2017-08-10 14:12 被阅读476次

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

    较为特殊的字符例如:!*'();:@&=+$,/?%#[]

    我们需要对含有这些字符的部分进行处理:

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

    username=liyong,psw=空,123=空,time=20120723

    解决办法:

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

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

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

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

    可以抽去出来当成一个公共的方法,NSString * encodeURLParam(NSString* paramString ){}

    参考链接:http://www.cnblogs.com/spiderdzl/p/5179331.html

    相关文章

      网友评论

          本文标题:http请求中字符转义

          本文链接:https://www.haomeiwen.com/subject/mzdhrxtx.html