1

Remy Sharp のSimple Drag and Dropのデモのソースを調べているときに、次の関数を見つけました。

function entities(s) {
  var e = {
    '"' : '"',
    '&' : '&',
    '<' : '<',
    '>' : '>'
  };
  return s.replace(/["&<>]/g, function (m) {
    return e[m];
  });
}

私が見たところ、「または&または<または>をそれ自体に置き換えるだけです。したがって、その機能は必要ありません。

私はどのように間違っていますか?

更新: ページの最後にある [ソースを表示] をクリックすると、ソースを表示できます。

4

5 に答える 5

2

どこで見たのかはわかりませんが (提供されたサイトでは見つかりません)、関数を読み間違えたか、ブラウザーによる何らかの解析の後に読んだ可能性があります。

<この関数は&gt;、 と&で置き換えられる可能性が最も高いです&amp;。ブラウザで見たことがあるので、ブラウザはエンティティを元の文字に戻して、< : <などの結果になりました。

これが本来の関数で間違いがなければ、この関数は何もしません。

于 2012-05-05T14:10:55.810 に答える
2

を使用して Chrome でページのソースを調べたところ、次のCtrl+Uことがわかりました。

function entities(s) {
  var e = {
    '"' : '&quot;',
    '&' : '&amp;',
    '<' : '&lt;',
    '>' : '&gt;'
  };
  return s.replace(/["&<>]/g, function (m) {
    return e[m];
  });
}

これは、明らかに何かを行います。つまり、特殊文字をエスケープされた形式に置き換えます。

あなたが行ったことを見た理由は、「ソースの表示」ページで表示しているソースが HTMLでレンダリングされているためです。したがって、ソースの&quot;文字列が「ソースの表示」ページにレンダリングされると、HTML ページに として表示され"ます。HTML5Deoms は&amp;quot;、レンダリングされたソース ページに として正しく表示されるように、ビュー ソース ページのアンパサンドをエスケープする必要&quot;がありますが、そうしません。

于 2012-05-05T14:13:32.837 に答える
1

あなたが正しい。この関数は何もしません。

于 2012-05-05T14:09:26.067 に答える
1

ソースを見たところ、次のように書かれています。

function entities(s) {
  var e = {
    '"' : '&quot;',
    '&' : '&amp;',
    '<' : '&lt;',
    '>' : '&gt;'
  };

特殊文字をエスケープしているため、HTML タグとソースが表示され、HTML として解釈されません。

于 2012-05-05T14:13:20.677 に答える
0

その機能をどこで見つけたのかわかりませんが、真実は正しいと思います。これは私が見つけたものです

    function entities(s) {
  var e = {
    '"' : '&quot;',
    '&' : '&amp;',
    '<' : '&lt;',
    '>' : '&gt;'
  };
  return s.replace(/["&<>]/g, function (m) {
    return e[m];
  });
}
于 2012-05-05T14:16:26.313 に答える