iOS - 无需解析即可构建电子邮件URL

时间:2013-03-26 03:58:46

标签: ios nsurl

我想使用某个类(NSURL或类似的)构建电子邮件URL 但是我不希望解析字符串的开销。我希望能够指定方案(在这种情况下为mailto)和地址(在这种情况下为someone@somewhere.com。)

我试过这段代码:

NSString *address = @"someone@somewhere.com";
NSString *scheme = @"mailto";

NSURL *url = [[NSURL alloc] initWithScheme:scheme host:address path:@"/"];
NSLog(@"test2: %@", [url absoluteString]);

但输出:

mailto://someone@somewhere.com/

甚至不是有效的电子邮件网址。

我有什么选择?

P.S。请不要建议使用NSDataDetector,因为它比通常的字符串解析更昂贵。

1 个答案:

答案 0 :(得分:2)

假设您确实拥有纯粹的电子邮件地址而没有其他用具,解决方案很简单:

- (NSURL *)mailtoURLWithEmailAddress:(NSString *)address;
{
  address = [address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  NSURL *result = [NSURL URLWithString:[@"mailto:" stringByAppendingString:address]];
  return result;
}

如果某人有可能指定ASCII字符之外的地址,或者包含一个保留的URL字符,则添加百分比转义非常重要。

要获得更强大的解决方案,请参阅我的KSFileUtilities存储库中的KSMailtoURLs。它补充说:

  • 处理包含收件人姓名的字符串以及地址
  • 电子邮件主题行编码等