IOS URL无法对加号进行编码导致http请求时服务器端获取的内容中加号变成空格问题

一、背景。

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

NSString *postUrl = "http地址";
postUrl = [postUrl stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];

二、原因。

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

三、解决方法。

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

应该采用方法:

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

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

原文地址:https://www.cnblogs.com/niit-soft-518/p/8005405.html