如何通过AFNetworking客户端发送带有空格的字符串?

时间:2012-12-20 14:16:14

标签: ios afnetworking

  

可能重复:
  URL encode a NSString

我正在尝试使用以下空格发送字符串:

stack exchange

通过

[[ApiClient sharedClient] getPath:[NSString stringWithFormat:@"/search/?q=%@", @"stack exchange"] parameters:nil success:^ ...

但我得到了

Error Domain=NSURLErrorDomain Code=-1000 "bad URL"

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您将要对您的网址参数进行编码。

// Add this to your class or universal class to be used
// Encode a string to embed in an URL.
NSString *encodeToPercentEscapeString(NSString *string) {
    return (__bridge NSString *)
    CFURLCreateStringByAddingPercentEscapes(NULL,
                                            (CFStringRef) string,
                                            NULL,
                                            (CFStringRef) @"!*'();:@&=+$,/?%#[]",
                                            kCFStringEncodingUTF8);
}

// now you can encode your parameters before adding to your url
NSString *urlParam = @"My custom text";

urlParam = encodeToPerecentEscapeString(urlParam);

// now you can use urlParam in any url parameter requirement

答案 1 :(得分:0)

我前一段时间制作了一个示例项目,它显示了在ObjC中转义字符串的不同方法。这是on github

我最终使用了这样的东西:

NSString *escapedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef) myString, NULL, CFSTR("!*()$&`:<>[]{}\"+#@/;=?\\^|~'%%,."), kCFStringEncodingUTF8));

这似乎涵盖了我能找到的所有边缘情况。