Pergunta

Eu gostaria de criar um URL Click ABLE no aplicativo de email. O problema é que um URL parametrizado quebra isso por causa de "&" no URL. A variável do corpo abaixo é a linha do problema. Ambas as versões do "corpo" estão incorretas. Depois que o aplicativo de email é aberto, o texto para em "... link:". O que é necessário para codificar os amperes e?

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];
Foi útil?

Solução

o ampersa e seria %26 para hexadecimal Codificação de URL padrões

Outras dicas

Eu tenho usado -[NSString gtm_stringByEscapingForURLArgument], que é fornecido em Caixa de ferramentas do Google para Mac, especificamente em GtmnsString+urlarguds.h e GtmnsString+urlarguds.m.

Você pode usar uma representação hexadecimal do personagem, neste caso %26.

você pode simplesmente usar CFURLCreateStringByAddingPercentEscapes com CFBridgingRelease por ARCO Apoio, suporte

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

Você usa stringByAddingPercentEscapesUsingEncoding, exatamente como você está fazendo.

O problema é que você não está usando o suficiente. O formato em que você está inserindo o corpo codificado também tem um ampersa e, que você não codificou. Em vez disso, coloque a corda não codificada e codificá -los (usando stringByAddingPercentEscapesUsingEncoding) juntos.

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

Está correto, embora '&' seja mais comumente usado que '&' ou ','.

Se o método 'StringByaddingPercentesCapesusingEncoding' fizer o que diz na lata, ele deve funcionar (*), mas a documentação da NSString parece um pouco clara sobre quais caracteres exatamente são escapados. Verifique o que você está acabando, o URL deve ser algo como:

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 A isenção de isenção usual que o Mailto: parâmetros de link como 'sujeito' e 'corpo' não são padronizados, falhará em muitas situações e geralmente deve ser evitado.)

Depois que o aplicativo de email é aberto, o texto para em "... link:".

Se 'StringByaddingPercenteScapeSusingEncoding' não estiver escape '<' para '%3C', esse pode ser o problema. Caso contrário, pode não ter nada a ver com fugas, mas uma restrição deliberada no nível de mala direta para não permitir '<'. Como mencionado anteriormente, "Body = ... não é um recurso confiável.

De qualquer forma, você não deve esperar que a mala direta reconheça o HTML e tente enviar um Mail HTML; Muito poucos farão isso.

Exemplo de uso de %26 em vez de e sem esses atributos chegaram ao PHP como uma matriz!

    var urlb='/tools/lister.php?type=101%26ID='+ID; // %26 instead of &
    window.location.href=urlb;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top