ios问题与stringByAddingPercentEscapesUsingEncoding

时间:2014-06-02 10:11:44

标签: ios

在我的应用程序中,我需要向url发送一些参数,当我尝试使用stringByAddingPercentEscapesUsingEncoding时,它无法正确转换。如果我没有使用这种编码,我将从nsurl获取null(Exception)。这是我的代码。

http://www.mycompurl.co?message=xyz&id=____我在这里发送id 1或2或任何数字。 当我通过使用stringByAddingPercentEscapesUsingEncoding将此字符串转换为url时,我得到了 “http://www.mycompurl.co?message=xyz&id= **%E2%80%8B ** 1”(当我发送1作为参数时)。然后我从Url获​​得了0个数据。

str = [NSString stringWithFormat:@"%@?message=xyz&id=​%@",Application_URL,bootupdateNew];
str = [str stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
url=[NSURL URLWithString:str];
NSError* error = nil;

data1 = [NSData dataWithContentsOfURL:url options:NSDataReadingUncached error:&error];

提前谢谢

1 个答案:

答案 0 :(得分:0)

基本

网址由多个组件组成。

每个组件都有其拥有规则,该组件的源字符串必须如何编码,以便该组件在URL字符串中有效。

如果字符串包含 more 而不是一个组件,那么应用stringByAddingPercentEscapesUsingEncoding: 永远不会生成正确的URL(如果我们假设,我们有一个无界集合源字符串 - 以便编码的字符串实际上与源字符串不同。)

它甚至不会使用表示任何单个组件的字符串始终

换句话说,对于什么值,stringByAddingPercentEscapesUsingEncoding:不应该用来尝试从几个组件中创建一个URL。即使正确编码的 URL查询组件也至少容易出错,而且在使用stringByAddingPercentEscapesUsingEncoding:时,它仍然存在问题。 (你可以在SO上找到正确的实现 - 而且我自己发布了一个)。

但是现在,忘了它:

Apple花了一段时间来认识到这种失败,并发明了NSURLComponents。它自iOS 7开始可用。看看吧! ;)