Как закодировать " & " в URL в значении атрибута HTML?
Я хотел бы сделать 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¶m=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];
7 ответов:
Амперсанд будет равен %26 для HEX в кодировке URL стандартах
Я использую
-[NSString gtm_stringByEscapingForURLArgument]
, который предоставляется в Google Toolbox для Mac, в частности в GTMNSString+URLArguments.h и GTMNSString+URLArguments.m .
Вы можете просто использовать
CFURLCreateStringByAddingPercentEscapes
сCFBridgingRelease
для ARC supportNSString *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
, точно так же, как вы это делаете.stringByAddingPercentEscapesUsingEncoding
) вместе.
<a href='http://somewhere.com/two.woa/wa?id=000&param=0'>click me</a>
Верно, хотя ‘ & "используется чаще, чем" & "или",".
Если метод’ stringByAddingPercentEscapesUsingencoding ' делает то, что он говорит на tin, он должен работать (*), но документация по 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: link, такие как "subject" и "body", являются нестандартными, во многих случаях потерпит неудачу ситуаций, и, как правило, следует избегать.)
Как только приложение электронной почты открывается, текст останавливается на "...ссылка:".
Если 'stringByAddingPercentEscapesUsingencoding' не экранирует ‘
В любом случае, вы не должны ожидать, что почтовая программа распознает HTML и попробуйте отправить HTML-письмо; очень немногие сделают это.