1. ホーム
  2. javascript

[解決済み] HTMLタグをHTMLエンティティとしてエスケープする最速の方法とは?

2022-10-28 10:43:44

質問

Chromeの拡張機能を書いているのですが、その中で ロット の文字列をサニタイズすることです。 があります。 を変換して、HTMLタグを含む文字列をサニタイズすることです。 < , >& から &lt; , &gt;&amp; のように、それぞれ

(言い換えれば、PHPの htmlspecialchars(str, ENT_NOQUOTES) - ダブルクオート文字を変換する必要性は特にないと思います)

これは私がこれまで見つけた中で最も速い関数です。

function safe_tags(str) {
    return str.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;') ;
}

でも、数千の文字列を一度に通すとなると、やはり大きなラグがありますね。

どなたか改良していただけませんか?10文字以上150文字未満の文字列が主な対象ですが、違いがあれば教えてください。

(私が持っていた1つのアイデアは、大なり記号をわざわざエンコードしないことでした。それで本当に危険はないでしょうか?)

どのように解決するのですか?

コールバック関数を渡して置換を実行してみてはいかがでしょうか。

var tagsToReplace = {
    '&': '&amp;',
    '<': '&lt;',
    '>': '&gt;'
};

function replaceTag(tag) {
    return tagsToReplace[tag] || tag;
}

function safe_tags_replace(str) {
    return str.replace(/[&<>]/g, replaceTag);
}

以下はパフォーマンステストです。 http://jsperf.com/encode-html-entities を呼び出した場合と比較するために replace 関数を繰り返し呼び出し、Dmitrij が提案した DOM メソッドを使用した場合と比較してみてください。

あなたの方法の方が早そうですが...。

なぜそれが必要なのですか?