在NSURL和iOS8 +中使用引号

时间:2015-10-06 12:27:03

标签: ios objective-c nsurl

我正在尝试使用NSURL形成请求。 我的代码:

(某处)

#define CLASS_URL @"https://www.someurl.com/xyz"

(某处)

NSString *className = @"className";

然后我的主要代码:

NSURL *url = [[NSURL alloc] initWithString:[NSString stringWithFormat:@"%@&name=\"%@\"", CLASS_URL, className]];

我已经阅读了许多关于在StackOverflow上添加引号的说明,说明我应该使用什么。我试过了:

  • %22%%22
  • 添加stringByAddingPercentEscapesUsingEncoding
  • 只需使用\",如所示代码所示

但是没有一个答案似乎有效。在致电(null)时,我总是NSLog(@"URL: %@", url);

任何人都知道如何正确地做到这一点?

修改 我按照建议尝试使用stringByAppendingString,但仍无效。

NSString *tmp = [CLASS_URL stringByAppendingString:[NSString stringWithFormat:@"&name=\"%@\"",className]];
  

预期结果:

     

www.someurl.com/xyz&name= “的className”

如果用户输入空格,我需要双引号。

2 个答案:

答案 0 :(得分:5)

您的预期网址不正确。

  

如果用户输入空格,我需要双引号。

双引号不会使空格在URL中合法。空格是保留的,必须是百分比编码,是否带引号。双引号不是未保留空间的一部分,因此如果需要它们也应该引用(但这不会使你免于编码空间)。

构建它的方法是对要发送的字符串进行编码:

NSString *className = @"className with space";
NSString *quotedClassName = [className stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"%@?name=%@", CLASS_URL, quotedClassName];
NSURL *url = [[NSURL alloc] initWithString:urlString];

这将编码为:

https://www.someurl.com/xyz?name=className%20with%20space

注意我已完全删除了双引号。如果你真的需要它们,那么你可以通过让原始字符串包含它们来获取它们,然后对它们进行编码:

NSString *className = @"\"className with space\"";
NSString *quotedClassName = [className stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];

这将编码为:

https://www.someurl.com/xyz?name=%22className%20with%20space%22

(我还修复了您的查询参数,这可能只是一个错字。查询与?的路径分开,而不是&。)

答案 1 :(得分:1)

网址中的引号需要替换为转义引号:

#define CLASS_URL @"https://www.someurl.com/xyz"

NSString *className = @"className";
NSString *query = [NSString stringWithFormat:@"name=\"%@\"", className];

// URL encode the query
query = [query stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];

NSString *urlString = [NSString stringWithFormat:@"%@?%@", CLASS_URL, query];
NSURL *url = [NSURL URLWithString:urlString];

NSLog(@"URL: %@", url);
  

网址:https://www.someurl.com/xyz?name=%22className%22

"&"需要使用?替换,查询字符串以?开头,后续参数用'&'分隔。