简单的功能,用iPhone OS中的加号(+)替换字符串中出现的所有空格

时间:2010-12-11 07:38:41

标签: iphone objective-c iphone-sdk-3.0

我想使用它,但需要一个解决方案..

NSString *googleAddress = @"http://maps.google.com?q=";
googleAddress = [googleAddress stringByAppendingString:self.address];
googleAddress = [googleAddress stringByAppendingString:@"+"];
googleAddress = [googleAddress stringByAppendingString:self.city];
googleAddress = [googleAddress stringByAppendingString:@",+"];
googleAddress = [googleAddress stringByAppendingString:self.state];
googleAddress = [googleAddress stringByAppendingString:@"&t=h"];

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:googleAddress]];

我需要用加号替换地址,城市和州值中的所有空格,以使谷歌地图能够正常工作。

由于

4 个答案:

答案 0 :(得分:4)

googleAddress = [googleAddress stringByReplacingOccurancesOfString:@" " withString:@"+"];

答案 1 :(得分:3)

我会采取不同的方法。我就是这样做的:

NSString * q = [NSString stringWithFormat:@"%@ %@, %@", self.address, self.city, self.state];

NSDictionary * queryDictionary = [NSDictionary dictionaryWithObjectsAndKeys:q, @"q", @"h", @"t", nil];

NSMutableArray * fields = [NSMutableArray array];
for (NSString * key in queryDictionary) {
  NSString * value = [queryDictionary objectForKey:key];
  NSString * encoded = [NSString stringWithFormat:@"%@=%@", [key URLEncodedString_ch], [value URLEncodedString_ch]];
  [fields addObject:encoded];
}

NSString * queryString = [fields componentsJoinedByString:@"&"];
NSString * googleString = [NSString stringWithFormat:@"http://maps.google.com?%@", queryString];
NSURL * googleURL = [NSURL URLWithString:googleString];
[[UIApplication sharedApplication] openURL:googleURL];
可以找到{p> -URLEncodedString_ch here

为什么这样更好?有几个原因:

  1. 查询字符串中的键应该是URL编码的。现在告诉他们,这只是ASCII字母中的一个字母,但你能保证它们永远都是吗?
  2. 查询字符串中的值应为URL编码。现在你只是想对空格进行加号编码。如果您的地址包含&=,该怎么办?地址不寻常,但并非不可能(尤其是街道名称中的&)。
  3. 这是高度可扩展的。如果您决定添加对外部地址的支持并且需要的不仅仅是简单的ASCII地址,那么将@"UTF-8"@"oe"对象和键添加到字典中以包含在查询字符串中是相当简单的。
  4. 百分比编码(如果您使用上面链接的类别方法)比stringByAddingPercentEscapesUsingEncoding:
  5. 更准确

答案 2 :(得分:0)

查看NSString的stringByReplacingOccurrencesOfString:withString:和NSMutableString的replaceOccurrencesOfString:withString:options:range:

答案 3 :(得分:0)

这个代码段可能对某些人有用,特别是因为Google对+和%20的处理方式相同。

NSString *escapedUrlString =
   [unescapedString stringByAddingPercentEscapesUsingEncoding:
                    NSASCIIStringEncoding];

来源:http://blog.evandavey.com/2009/01/how-to-url-encode-nsstring-in-objective-c.html