我想在电子邮件应用中点击一下网址。问题是参数化的URL因“&”而破坏了这一点。在URL中。下面的body变量是问题行。两种版本的“身体”都是不正确的。电子邮件应用程序打开后,文本将停在“... link:”处。对&符号进行编码需要什么?
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¶m=0'>click me</a>"; //original
NSString *body = @"This is a link: <a href='http://somewhere.com/two.woa/wa?id=000&param=0'>click me</a>"; //have also tried &
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];
答案 0 :(得分:19)
在URL Encoding标准
中,十六进制对于HEX将是%26答案 1 :(得分:11)
我一直在使用-[NSString gtm_stringByEscapingForURLArgument]
中提供的{{1}},特别是Google Toolbox for Mac和GTMNSString+URLArguments.h。
答案 2 :(得分:3)
您可以使用该字符的十六进制表示,在本例中为%26。
答案 3 :(得分:3)
您只需将CFURLCreateStringByAddingPercentEscapes
与CFBridgingRelease
一起用于 ARC 支持
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));
答案 4 :(得分:1)
您使用stringByAddingPercentEscapesUsingEncoding
,就像您正在做的那样。
问题是你没有充分利用它。您插入编码主体的格式还有一个&符号,您尚未对其进行编码。将未编码的字符串转换为它,并将它们编码(使用stringByAddingPercentEscapesUsingEncoding
)。
答案 5 :(得分:0)
<a href='http://somewhere.com/two.woa/wa?id=000&param=0'>click me</a>
是正确的,虽然'&amp; amp;'比'&amp;#38;'或'&amp;#x2C;'更常用。
如果'stringByAddingPercentEscapesUsingEncoding'方法执行它在锡上的说法,它应该工作(*),但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
(*:模块化通常的免责声明:mailto:链接参数如'subject'和'body'是非标准的,在许多情况下都会失败,通常应该避免。)
电子邮件应用程序打开后,文本将停在“... link:”。
如果'stringByAddingPercentEscapesUsingEncoding'没有将'&lt;'转义为'%3C',那可能就是问题所在。否则,它可能与逃避无关,而是故意禁止使用'&lt;'的邮件程序限制。如前所述,?body = ...不是一个可靠的功能。
在任何情况下,您都不应期望邮件程序识别HTML并尝试发送HTML邮件;很少有人会这样做。
答案 6 :(得分:0)
使用%26而不是&amp;的示例没有这个属性作为数组到达PHP!
var urlb='/tools/lister.php?type=101%26ID='+ID; // %26 instead of &
window.location.href=urlb;