转义URL查询字符串

时间:2011-02-21 19:04:55

标签: iphone objective-c cocoa-touch nsurl

我使用GET方法向外部API发出请求。 由于某些原因,如果searchText包含空格,我得到的结果不起作用,例如它适用于stackoverflow,但如果searchText作为“堆栈溢出”输入,它将无法工作(假设两个值都存在)。在发出URL请求之前,我是否需要转义?

NSString *urlstr = [[NSString alloc] initWithFormat:@"http://mysite.com/xyz?nameBeginsWith=%@", searchText];

2 个答案:

答案 0 :(得分:27)

你试过这个吗?

NSString *urlstr = [NSString stringWithFormat:@"http://mysite.com/xyz?nameBeginsWith=%@", searchText];
urlstr = [urlstr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

stringByAddingPercentEscapesUsingEncoding接受一个字符串并返回相同的字符串百分比转义,以合法地用作URL。因此,您的问题的答案是肯定的,NSURL需要正确转义的字符串进行初始化

NSURL Reference

答案 1 :(得分:1)

方法stringByAddingPercentEscapesUsingEncoding现已弃用。

转义网址的正确方法是:

  

NSString * escapedSearchText = [searchText stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];

     

NSString * url = [NSString   stringWithFormat:@ “http://example.com/xyz?nameBeginsWith=%@”,   escapedSearchText];