HTML属性値でURLで「&」をエンコードするにはどうすればよいですか?
-
06-09-2019 - |
質問
電子メールアプリで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¶m=0'>click me</a>"; //original
NSString *body = @"This is a link: <a href='http://somewhere.com/two.woa/wa?id=000&param=0'>click me</a>"; //have also tried &
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進表現を使用できます。
単に使用できます 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&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;