문제

전자 메일 앱에서 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&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];
도움이 되었습니까?

해결책

암페어는 16 진수의 경우 %26입니다 URL 인코딩 표준

다른 팁

나는 사용하고있다 -[NSString gtm_stringByEscapingForURLArgument], 이에 제공됩니다 Mac 용 Google 도구 상자, 특히 gtmnsstring+urlarguments.h 그리고 gtmnsstring+urlarguments.m.

문자의 16 진수 표현,이 경우 %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, 당신이하는 것처럼 똑같습니다.

문제는 충분히 사용하지 않는다는 것입니다. 인코딩 된 본체를 삽입하는 형식 또한 인코딩되지 않은 앰퍼 샌드가 있습니다. 대신 인코딩되지 않은 문자열을 대신에 태우고 (사용 stringByAddingPercentEscapesUsingEncoding) 함께.

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

'&'는 '&'또는 ','보다 더 일반적으로 사용되지만 맞습니다.

'stringByAddingPerCentescapeSusingEncoding'메소드가 주석에서 말하는 것을 수행하면 작동해야하지만 (*) 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 Mailto : 'Subject'및 'Body'와 같은 링크 매개 변수는 비표준이 아니며 많은 상황에서 실패하며 일반적으로 피해야합니다.)

이메일 앱이 열리면 텍스트가 "... 링크 :"에서 중지됩니다.

'stringByAddingPerCentescapesUsingEncoding'이 '<'로 '%3c'를 벗어나지 않는다면 문제가 될 수 있습니다. 그렇지 않으면 탈출과 관련이 없을 수도 있지만 ''< '를 허용하지 않는 고의적 인 메일러 수준의 제한이 될 수 있습니다. 앞서 언급했듯이, body = ...은 신뢰할 수있는 기능이 아닙니다.

어쨌든 메일러가 HTML을 인식하고 HTML 메일을 보내려고하지 않아야합니다. 그렇게 할 수있는 사람은 거의 없습니다.

이 속성이없는 대신 %26의 사용 예는 배열로 PHP에 도착했습니다!

    var urlb='/tools/lister.php?type=101%26ID='+ID; // %26 instead of &
    window.location.href=urlb;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top