web-dev-qa-db-ja.com

HTML属性値のURLで「&」をエンコードするにはどうすればよいですか?

メールアプリでURLクリックできるようにしたいのですが。問題は、パラメータ化されたURLが、URLの「&」のためにこれを壊してしまうことです。以下のbody変数は問題の行です。 「body」の両方のバージョンが正しくありません。メールアプリが開くと、テキストは「... link:」で停止します。アンパサンドをエンコードするには何が必要ですか?

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:[email protected]?subject=%@&body=%@", encodedSubject, encodedBody];
NSURL *url = [[NSURL alloc] initWithString:formattedURL];
[[UIApplication sharedApplication] openURL:url];
15
4thSpace

RLエンコード 標準のHEXのアンパサンドは%26になります

20
Konstantinos

私は-[NSString gtm_stringByEscapingForURLArgument]を使用しています。これは、 Google Toolbox for Mac 、特に GTMNSString + URLArguments.h および GTMNSString + URLArguments)で提供されています。 m

11
Chris Lundie

[〜#〜] arc [〜#〜]サポートのためにCFURLCreateStringByAddingPercentEscapesCFBridgingReleaseを使用するだけです。

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

文字の16進表現(この場合は%26)を使用できます。

3
Lucero

stringByAddingPercentEscapesUsingEncodingを、まったく同じように使用します。

問題は、それを十分に使用していないことです。エンコードされた本文を挿入する形式またには、エンコードされていないアンパサンドがあります。代わりに、エンコードされていない文字列をタックし、(stringByAddingPercentEscapesUsingEncodingを使用して)一緒にエンコードします。

1
Peter Hosey

この属性なしで&の代わりに%26を使用した例は、配列としてPHPに到着しました!

    var urlb='/tools/lister.php?type=101%26ID='+ID; // %26 instead of &
    window.location.href=urlb;
0
zzapper