Frage

Ich möchte eine URL -Klick in der E -Mail -App klicken. Das Problem ist, dass eine parametrisierte URL dies aufgrund von "&" in der URL bricht. Die unten stehende Körpervariable ist die Problemlinie. Beide Versionen von "Körper" sind falsch. Sobald die E -Mail -App geöffnet ist, wird der Text unter "... Link:" gestoppt. Was wird benötigt, um das Ampersand zu codieren?

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];
War es hilfreich?

Lösung

Der Verstärker und wäre %26 für Hex in URL -Codierung Standards

Andere Tipps

Ich habe verwendet -[NSString gtm_stringByEscapingForURLArgument], was in bereitgestellt wird in Google Toolbox für Mac, speziell in Gtmnsstring+urlargumente.h und Gtmnsstring+urlargumente.m.

Sie können eine Hex -Darstellung des Charakters verwenden, in diesem Fall %26.

Sie können einfach verwenden CFURLCreateStringByAddingPercentEscapes mit CFBridgingRelease zum BOGEN Unterstützung

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));

Sie nutzen stringByAddingPercentEscapesUsingEncoding, genau wie du es tust.

Das Problem ist, dass Sie es nicht genug verwenden. Das Format, in das Sie den codierten Körper einfügen Auch Hat einen Verstärker und, den Sie nicht codiert haben. Falten Sie stattdessen die unversehrte Zeichenfolge darauf an und codieren Sie sie (verwenden Sie sie stringByAddingPercentEscapesUsingEncoding) zusammen.

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

Ist korrekt, obwohl '&' häufiger verwendet wird als '&' oder ',', '.

Wenn die Methode 'StringByAddingPercentesSuSusingCoding' das tut, was sie auf der Dose sagt, sollte sie (*) funktionieren, aber die NSString -Dokumentation sieht ein bisschen unklar aus, welche Charaktere genau entkommen sind. Überprüfen Sie, womit Sie enden, die URL sollte so etwas wie folgt:

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 den üblichen Haftungsausschluss, dass Mailto: Linkparameter wie 'Subjekt' und 'Körper' nicht standardmäßig sind, in vielen Situationen scheitern und im Allgemeinen vermieden werden sollten.)

Sobald die E -Mail -App geöffnet ist, wird der Text unter "... Link:" gestoppt.

Wenn 'StringByAddingPercentescapeSusingCoding' nicht entkommt "<'zu'%3c ', könnte das das Problem sein. Ansonsten ist es möglicherweise nichts mit Flucht zu tun, sondern eine absichtliche Einschränkung auf Mailerebene, die '<' nicht zulässt. Wie bereits erwähnt, ist Body = ... keine zuverlässige Funktion.

In jedem Fall sollten Sie nicht erwarten, dass der Mailer die HTML erfasst und versucht, eine HTML -Mail zu senden. Sehr wenige werden das tun.

Beispiel für die Verwendung von %26 anstelle von & ohne diese Attribute kam als Array in PHP an!

    var urlb='/tools/lister.php?type=101%26ID='+ID; // %26 instead of &
    window.location.href=urlb;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top