如何在HTML属性值中的URL中编码“&”?
-
06-09-2019 - |
题
我想在电子邮件应用程序中单击一个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¶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];
解决方案
Ampersand和Hex的百分比为26 URL编码 标准
其他提示
我一直在使用 -[NSString gtm_stringByEscapingForURLArgument]
, ,在 Mac的Google工具箱, ,特别是 gtmnsstring+urlarguments.h 和 gtmnsstring+urlarguments.m.
您可以使用角色的十六进制表示,在这种情况下为%26。
您可以简单地使用 CFURLCreateStringByAddingPercentEscapes
和 CFBridgingRelease
为了 弧 支持
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&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;