2009-07-03 2 views
2

UPDATE: Я только что нашел аналогичный пост здесь: How do I encode "&" in a URL in an HTML attribute value?Создание электронной почты: URL с URL в теле iPhone SDK

Пожалуйста, обратите внимание на код ниже: попытке отправить сообщение электронной почты из моего iPhone приложение. Проблема, с которой я сталкиваюсь, заключается в том, что я хочу поместить URL-адрес в тело письма. Этот URL-адрес содержит два амперсанда. Я кодирую все строки, используя «stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding», но URL-адрес заканчивается в моем новом почтовом messagd, усеченном после первого амперсанда. IE: «http://www.mydomain.nl/?cm=79&ctime=1246572000&cid=4772» становится «http://www.mydomain.nl/?cm=79».

Любое предложение, что я могу сделать, чтобы убежать?

NSString *eMailSubject = @"My Subject"; 
NSString *encodedSubject = [[NSString alloc] initWithString:[eMailSubject stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
NSString *eMailBody = @"http://www.mydomain.nl?cm=79&ctime=1246572000&cid=4772"; 
NSString *encodedBody = [[NSString alloc] initWithString:[eMailBody stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
NSString *urlString = [[NSString alloc] initWithString:[NSString stringWithFormat:@"mailto:?subject=%@&body=%@", encodedSubject, encodedBody]]; 
NSString *encodedURL = [[NSString alloc] initWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
NSURL *url = [[NSURL alloc] initWithString:encodedURL]; 
[[UIApplication sharedApplication] openURL:url]; 

ответ

0

Является ли тело сообщения электронной почты HTML? Если это так, большинство читателей электронной почты и браузеров будут пытаться интерпретировать амперсанд как префикс объекта HTML и видя «ctime» вместо значения юридического лица после амперсанда, просто откажитесь от разбора остальной строки.

Here are some details. Попробуйте выполнить строчную замену символов '&' '&' и посмотреть, поможет ли это.

Кроме того, возможно, вы захотите рассмотреть возможность использования новой платформы обмена сообщениями в ОС 3.0, которая позволяет отправлять электронную почту непосредственно из вашего приложения.

+0

Проблема здесь состоит в том, что замена «&» содержит «&», так что это не решает проблему. Как предлагалось здесь (http://stackoverflow.com/questions/730101/how-do-i-encode-in-a-url-in-an-html-attribute-value) Я должен использовать шестнадцатеричный код% 26. Как-то это тоже не работает для меня. – Sjakelien

+0

Вы смешиваете «&» в URL с «&» как объект HTML. Значение% 26 предназначено для кодирования URL-адреса. Но если вы хотите включить ссылку в HTML-контент, вам нужно заменить «&» на «&». Когда парсер HTML видит «&», он смотрит в будущее. Если это одна из значений юридического лица в опубликованной ссылке, она отображает ее с этим символом. Если он недействителен, он останавливается (это то, что вы получаете). Ознакомьтесь с разделом об амперсандах здесь: http://htmlhelp.com/tools/validator/problems.html – Ramin

0

Если вы хотите настоящие HTML-адреса, вы не можете использовать mailto:.

Вы должны выполнить одно из следующих действий:

  1. реализовать свой собственный сервер SMTP
  2. использование SDK 3.0 почты рамок (MFMailCompose ...)
+0

Это довольно заявление! У вас есть аргументация? – Sjakelien

+0

в основном проб и ошибок. В iPhone 2.2 дней я выпустил некоторый код для части smtp. он доступен по адресу: http://github.com/kailoa/iphone-smtp/tree – amattn

Смежные вопросы