1. ホーム
  2. javascript

[解決済み】JavaScriptでHtmlSpecialCharsに相当するものは何ですか?

2022-04-16 05:44:12

質問

どうやら、これは思ったより難しいようです。しかも、こんなに簡単なのに...。

PHPの htmlspecialchars をJavaScriptに組み込んだのでしょうか?自分で実装するのはかなり簡単だと思いますが、もしあれば組み込みの関数を使う方がすっきりします。

PHP に慣れていない人のために説明すると、htmlspecialchars は以下のようなものを翻訳します。 <htmltag/>&lt;htmltag/&gt;

知っている escape()encodeURI() はこのように動作しません。

解決方法は?

このコードには問題があり、各特殊文字の最初の出現箇所のみをエスケープしてしまいます。例えば

escapeHtml('Kip\'s <b>evil</b> "test" code\'s here');
Actual:   Kip&#039;s &lt;b&gt;evil</b> &quot;test" code's here
Expected: Kip&#039;s &lt;b&gt;evil&lt;/b&gt; &quot;test&quot; code&#039;s here

以下は、正常に動作するコードです。

function escapeHtml(text) {
  return text
      .replace(/&/g, "&amp;")
      .replace(/</g, "&lt;")
      .replace(/>/g, "&gt;")
      .replace(/"/g, "&quot;")
      .replace(/'/g, "&#039;");
}


更新情報

次のコードは、上記と同じ結果をもたらしますが、特に大きなテキストブロックでは、より良いパフォーマンスを発揮します(感謝 jbo5112 ).

function escapeHtml(text) {
  var map = {
    '&': '&amp;',
    '<': '&lt;',
    '>': '&gt;',
    '"': '&quot;',
    "'": '&#039;'
  };
  
  return text.replace(/[&<>"']/g, function(m) { return map[m]; });
}