如何在Objective-C中使用带格式的转义URL字符串

如何在Objective-C中使用带格式的转义URL字符串,objective-c,macos,escaping,Objective C,Macos,Escaping,我需要根据用户的输入从网站收集数据 searchString是用户输入的值,如“搜索此字符串” 在这里,我需要用%20替换空格 接下来,我需要将不带空格的新字符串(替换为%20)放入另一个字符串中 NSString *unescapedSearchString = [NSString stringWithFormat: @"website.com/query?=%22%@%22", withoutSpaces]; 我需要的网站不是

我需要根据用户的输入从网站收集数据

searchString是用户输入的值,如“搜索此字符串”

在这里,我需要用%20替换空格

接下来,我需要将不带空格的新字符串(替换为%20)放入另一个字符串中

NSString *unescapedSearchString = [NSString stringWithFormat:
                                @"website.com/query?=%22%@%22", withoutSpaces];
我需要的网站不是真正的“website.com”,但这只是一个例子。我还需要将%22保留在开头和结尾

如您所见,我需要%@将新的withoutSpaces用户输入格式化到网站URL中

我进行了搜索,找到了一些示例,但找不到任何具有格式的示例,例如在我的案例中使用%@

“转义”字符并保留格式化字符串的最佳方法是什么?目前,当我尝试从网站访问数据时,返回为空。但是,当我尝试一个没有%@格式和实际值的字符串时,我成功地从网站检索到了数据


非常感谢您的帮助。

您应该这样做:

NSString *searchString = ... // the raw search string with spaces and all
NSString *quoted = [NSString stringWithFormat:@"\"%@\"", searchString];
NSString *escaped = [quoted stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSString *urlString = [NSString stringWithFormat:@"website.com?query=%@&value=all", escaped];

顺便说一句,URL似乎有点不对劲。在
=
之前和
之后应该有一个变量名?

如果URL是用格式化字符串文字创建的,那又有什么关系呢?你仍然可以转义它。我需要使用stringWithFormat来包含%@但是%22和&也会干扰。谢谢你的输入。我需要在搜索字符串之前加“?query=%22”。搜索字符串后需要“%22&value=all”。所以它应该看起来像“?query=%22test%20search%22&value=all”。编辑:我相信我是通过使用stringWithFormat来实现的,我只是将withoutSpaces附加到网站字符串的开头,然后将网站字符串的结尾添加到该字符串中。我现在可以成功获取网站数据,而无需处理格式问题。请参阅我的更新答案。我更新URL以满足您的第一条评论。我发布的代码为您提供了所需的内容,包括引号和正确转义的所有内容。谢谢,您更新的代码也可以使用。我不明白没有%22s它是如何工作的,但在控制台中它显示为%22s(这是我需要的正确格式)。不过,谢谢。看看我是如何创建
转义的
字符串的。这就是所有%XX值的来源。
NSString *searchString = ... // the raw search string with spaces and all
NSString *quoted = [NSString stringWithFormat:@"\"%@\"", searchString];
NSString *escaped = [quoted stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSString *urlString = [NSString stringWithFormat:@"website.com?query=%@&value=all", escaped];