美文网首页
【转】IOS URL无法对+加号进行编码导致http get请求

【转】IOS URL无法对+加号进行编码导致http get请求

作者: nkk | 来源:发表于2017-07-18 14:58 被阅读253次

一、背景。

将以下地址请求服务器时,如果postUrl中某个参数值包含符号+  那么在服务器获取到这个参数值时,其加号变成了一个空格。

NSString *postUrl = "http地址";

postUrl = [postUrl stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];

二、原因。

是因为当这个地址进行以上编码时并没有对加号进行处理,正常情况下地址中的加号应该被转码成%2B

三、解决方法。

[postUrl stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]已经是iOS过时的方法,应该是存在问题的,所以IOS不建议用。

应该采用方法:

postUrl = [postUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@"#%<>[\\]^`{|}\"]+"].invertedSet];

其中方法[NSCharacterSet characterSetWithCharactersInString:@"#%<>[\\]^`{|}\"]+"]中的字符串"【#%<>[\\]^`{|}\"]+】用户可自定义,代表的意思是需要对这些特殊字符进行转码。里面包含了加号,当然就没问题了。

【扩展】

除了自定义,IOS也提供了几个枚举值,代表的特殊字符以及调用方法如下:

[java] view plain copy

URLFragmentAllowedCharacterSet  "#%<>[\]^`{|}

URLHostAllowedCharacterSet      "#%/<>?@\^`{|}

URLPasswordAllowedCharacterSet  "#%/:<>?@[\]^`{|}

URLPathAllowedCharacterSet      "#%;<>?[\]^`{|}

URLQueryAllowedCharacterSet    "#%<>[\]^`{|}

URLUserAllowedCharacterSet      "#%/:<>?@[\]^`

调用:

postUrl = [postUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];

【看到别人的文章说是转的,没注明转自哪里,我也不知道原文是哪个,转来分享给大家】

另外我自己改的一种方法是,问题原因因为“+”号 会被当成空格传给服务器,而正确的+号应该被转成%2B,所以 在url里面 直接replace成%2B 传到服务器也是正确的

相关文章

网友评论

      本文标题:【转】IOS URL无法对+加号进行编码导致http get请求

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