質問

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>')
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top