我正在尝试使用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”
如果用户输入空格,我需要双引号。
答案 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);
"&"需要使用?
替换,查询字符串以?
开头,后续参数用'&'分隔。