我想在电子邮件应用程序中单击一个URL。问题在于,由于URL中的“&”,参数化的URL破坏了这一点。下面的身体变量是问题线。两个版本的“身体”都是不正确的。电子邮件应用程序打开后,文本将停止在“ ...链接:”。编码及时需要什么?

NSString *subject = @"This is a test";
NSString *encodedSubject = 
[subject stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

//NSString *body = @"This is a link: <a href='http://somewhere.com/two.woa/wa?id=000&param=0'>click me</a>"; //original
NSString *body = @"This is a link: <a href='http://somewhere.com/two.woa/wa?id=000&#38;param=0'>click me</a>"; //have also tried &amp;
NSString *encodedBody = 
[body stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSString *formattedURL = [NSString stringWithFormat: @"mailto:myname@somedomain.com?subject=%@&body=%@", encodedSubject, encodedBody];
NSURL *url = [[NSURL alloc] initWithString:formattedURL];
[[UIApplication sharedApplication] openURL:url];
有帮助吗?

解决方案

Ampersand和Hex的百分比为26 URL编码 标准

其他提示

我一直在使用 -[NSString gtm_stringByEscapingForURLArgument], ,在 Mac的Google工具箱, ,特别是 gtmnsstring+urlarguments.hgtmnsstring+urlarguments.m.

您可以使用角色的十六进制表示,在这种情况下为%26。

您可以简单地使用 CFURLCreateStringByAddingPercentEscapesCFBridgingRelease 为了 支持

NSString *subject = @"This is a test";
// Encode all the reserved characters, per RFC 3986
// (<http://www.ietf.org/rfc/rfc3986.txt>)
NSString *encodedSubject =
(NSString *) CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                            (CFStringRef)subject,
                                            NULL,
                                            (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                                            kCFStringEncodingUTF8));

你用 stringByAddingPercentEscapesUsingEncoding, ,就像你在做。

问题是您使用它不够。您要插入编码的身体的格式 有一个ampersand,您尚未编码。将未编码的字符串贴在其上,然后对其进行编码(使用 stringByAddingPercentEscapesUsingEncoding) 一起。

<a href='http://somewhere.com/two.woa/wa?id=000&#38;param=0'>click me</a>

是正确的,尽管“&”比“&”或“”更常用。

如果“ StringByAddingPercentEscapesusticeSoding”方法可以在锡上说的话,则应起作用(*),但是NSString文档看起来有点不清楚,确切地逃脱了哪些字符。检查您的最终结果,URL应该是:

mailto:bob@example.com?subject=test&body=Link%3A%3Ca%20href%3D%22http%3A//example.com/script%3Fp1%3Da%26amp%3Bp2%3Db%22%3Elink%3C/a%3E

(*:modulo,邮件to的通常免责声明:诸如'主题'和“身体”之类的链接参数是非标准的,在许多情况下会失败,通常应避免。)

电子邮件应用程序打开后,文本将停止在“ ...链接:”。

如果“ string byaddingpercentescapesustingencesing”不会逃脱'<'to'%3C',那可能是问题所在。否则,这可能与逃脱无关,而是对禁止'<'的故意邮件级限制。如前所述,“ Body” = ...不是可靠的功能。

无论如何,您都不应该指望邮件机识别HTML并尝试发送HTML邮件;很少有人会这样做。

使用%26代替和没有此属性的示例作为数组到达PHP!

    var urlb='/tools/lister.php?type=101%26ID='+ID; // %26 instead of &
    window.location.href=urlb;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top