1

我想使用某个类(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/

这甚至不是有效的电子邮件 URL。

我有哪些选择?

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

4

1 回答 1

2

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

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

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

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

  • 处理包含收件人姓名和地址的字符串
  • 电子邮件主题行的编码等。
于 2013-04-09T13:18:19.773 回答