アンカーhrefのinnerHTMLとC%23(C#)-Firefox
-
03-07-2019 - |
質問
If you set the innerHTML of a <div> to innerHTML = '<a href="Something/C%23">C#</a><br />';
実際に「レンダリング」されると思われるものは次のとおりです:
<div>
<a href="Something/C#">C#</a><br />
</div>
リンクが<!> quot; Something / C%23 <!> quot;のままになるように、これをエスケープする適切な方法は何ですか?
更新:
ここで奇妙な小さなことに気づきました。関数を使用してリンクを作成する場合。余分な%25エスケープは必要ありません。奇妙な。
例
function buildLink(tg, nm) {
return '<a href="Something/' + tg + '">' + nm + '</a><br />';
}
解決
これを試してください:
<a href="Something/C%2523">C#</a><br />
<!> quot; %
<!> quot;を展開します。 <!> quot; %25
<!> quot;欲しいものが手に入ります。次に、<!> quot; 23
<!> quot;パーセント文字に変換され、後続の<=>は再解釈されません。
他のヒント
多くのブラウザが<!> quot; Something/C%23
<!> quot;へのリンクを表示することに注意してください。 as <!> quot; Something/C#
<!> quot; <!> quot; friendly <!> quot; URL。 Firebugまたは同様のツールを使用してdiv
をチェックし、実際に正しく設定されていることを確認してください。
もしそうなら、パーセント記号を%25
としてエスケープする必要があります:
innerHTML = '<a href="Something/C%2523">C#</a><br />';
パーセント自体をエスケープすると、必要になります。
innerHTML = '<a href="Something/C%2523">C#</a><br />';
実際に「レンダリング」されると思われるものは:
<a href="Something/C#">C#</a><br />
いいえ。リンクにカーソルを合わせると、Firefoxはステータスバーでリンクが<!> quot; C#<!> quot;に移動することを通知しますが、嘘をついています。実際にリンクをクリックすると、<!> quot; C%23 <!> quot;になります。 (アドレスバーに表示されます)。
リンクが<!> quot; Something / C%23 <!> quot;のままになるように、これをエスケープする適切な方法は何ですか?
最初は正しかった。 <!> quot; Something / C%2523 <!> quot;エンコードが多すぎます。
ここで奇妙な小さなことに気付きました。関数を使用してリンクを作成する場合。余分な%25エスケープは必要ありません。
関数に入っていてもいなくても、影響はありません。テストメカニズムとしてアドレスバーを使用してjavascript:URLを入力している場合、 が影響し、ここで混乱する可能性があります。 javascript:URLは依然としてURLであり、JSインタープリターがコードを確認する前に、URL内の%エンコードは1ステップ元に戻されます。 JS文字列リテラルのエスケープを使用した場合、この問題は発生しません。
javascript:alert(document.body.innerHTML='<a href="Something/C\x2523">C#</a>')