Question

Je voudrais faire un clic URL dans l'application de messagerie. Le problème est qu'une URL paramétrée casse cela à cause de "&" dans l'URL. La variable corporelle ci-dessous est la ligne de problème. Les deux versions du «corps» sont incorrectes. Une fois l'application e-mail ouverte, le texte s'arrête à "... lien:". Qu'est-ce qui est nécessaire pour coder l'ampère et?

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];
Était-ce utile?

La solution

L'Ampersand serait% 26 pour Hex in Encodage d'URL normes

Autres conseils

J'ai utilisé -[NSString gtm_stringByEscapingForURLArgument], qui est fourni dans Google Toolbox pour Mac, spécifiquement dans Gtmnsstring + urlarguments.h et Gtmnsstring + urlarguments.m.

Vous pouvez utiliser une représentation hexadécimale du personnage, dans ce cas% 26.

vous pouvez simplement utiliser CFURLCreateStringByAddingPercentEscapes avec CFBridgingRelease pour ARC Support

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

Tu utilises stringByAddingPercentEscapesUsingEncoding, exactement comme vous le faites.

Le problème est que vous ne l'utilisez pas assez. Le format dans lequel vous insérez le corps codé aussi A un ampère et que vous n'avez pas codé. Ajouter la chaîne non codée dessus à la place et les encoder (en utilisant stringByAddingPercentEscapesUsingEncoding) ensemble.

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

Est correct, bien que '&' soit plus couramment utilisé que '&' ou ','.

Si la méthode 'StringByAddingPerceScapesusUSINCODing' fait ce qu'elle dit sur l'étain, elle devrait fonctionner (*), mais la documentation NSString semble un peu claire sur les caractères exactement échappés. Vérifiez ce que vous vous retrouvez, l'URL devrait être quelque chose comme:

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 l'avertissement habituel que les paramètres de liaison comme «sujet» et «corps» sont non standard, échoueront dans de nombreuses situations et devraient généralement être évités.)

Une fois l'application e-mail ouverte, le texte s'arrête à "... lien:".

Si «StringByAddingPerceScapesususingEncoding» n'échappe pas «<» à «% 3c», cela pourrait être le problème. Sinon, ce n'est peut-être pas à voir avec les évasions, mais une restriction délibérée au niveau du mailer pour interdire '<'. Comme mentionné précédemment,? Body = ... n'est pas une fonctionnalité fiable.

Dans tous les cas, vous ne devez pas vous attendre à ce que le Mailer reconnaisse le HTML et essaie d'envoyer un courrier HTML; Très peu le feront.

Exemple d'utilisation de% 26 au lieu de & sans ces attributs est arrivé en php comme tableau!

    var urlb='/tools/lister.php?type=101%26ID='+ID; // %26 instead of &
    window.location.href=urlb;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top