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

StackOverflow https://stackoverflow.com/questions/730101

質問

電子メールアプリでURLをクリックできるようにしたいと思います。問題は、パラメーター化されたURLがURLの「&」のためにこれを破壊することです。以下のボディ変数は問題行です。 「ボディ」の両方のバージョンが正しくありません。電子メールアプリが開くと、テキストは「... 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: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.hgtmnsstring+urlarguments.m.

この場合、文字の16進表現を使用できます。

単に使用できます 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));

あなたが使う stringByAddingPercentEscapesUsingEncoding, 、あなたがやっているように。

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

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

「&」は「&」または「」よりも一般的に使用されていますが、正しいです。

「stringbyaddingpercentescapeSingingingのメソッドがブリキに書かれていることを実行する場合、それは動作するはずですが、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

(*:moilto:「件名」や「ボディ」などのリンクパラメーターが標準以外であり、多くの状況で失敗し、一般的に避けるべきであるという通常の免責事項をmoduloします。)

電子メールアプリが開くと、テキストは「... link:」で停止します。

「stringbyaddingpercentescapeSinging 'が「' <」を「%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