7

サーバーにデータを送信/POST するとき、その文字 (関連する文字) をHTML エンコードvalidationRequest = falseする必要があります。これは、設定によって入力チェックを無効にすることはお勧めできないためです。

すべてのソリューションは、最終的に文字列内の文字を置き換えています:

これは私が書いたものです。

function htmlEncode(str) {
    str = str.replace(/\&/g, "&");
    str = str.replace(/\</g, "&lt;");
    str = str.replace(/\>/g, "&gt;");
    str = str.replace(/ /g, "&nbsp;");
    return str;
}

しかし、どうやら正規表現はもっと高速なものに置き換えることができます (誤解しないでください - 私は正規表現が大好きです)。

また、インデックスと部分文字列を扱うのは無駄に思えます。

それを行う最速の方法は何ですか?

4

3 に答える 3

13
function htmlEncode(str) {
    return String(str)
            .replace(/&/g, '&amp;')
            .replace(/"/g, '&quot;')
            .replace(/'/g, '&#39;')
            .replace(/</g, '&lt;')
            .replace(/>/g, '&gt;');
}

jsperf テストでは、この方法が高速であり、最近のブラウザー バージョンを使用している場合はおそらく最速のオプションであることが

これも好きな別の方法

function htmlEncode(value){
  return $('<div/>').text(value).html();
}

function htmlDecode(value){
  return $('<div/>').html(value).text();
}
于 2012-09-24T09:20:13.830 に答える
0
function htmlEncode(value){
    if (value) {
        return jQuery('<div />').text(value).html();
    } else {
        return '';
    }
}

function htmlDecode(value) {
    if (value) {
        return $('<div />').html(value).text();
    } else {
        return '';
    }
}
于 2012-09-24T09:23:25.503 に答える
0

HTML エンティティをエンコードするだけの場合は、次を試すことができます。

function htmlEncode(str) {
    var d = document.createElement('b');
    d.innerText = str;
    return d.innerHTML;
}

この方法は最速ではありません。このテストは、regExp の方が高速であることを示しています: http://jsperf.com/encodehtml

ただし、消費する HTML が多いほど、差は小さくなるようです。

innerText メソッドは、エンティティのネイティブ ブラウザー変換テーブルを利用するため、より信頼性が高いようです。RegExp を使用すると、何かを見逃している可能性が常にあります。以前の回答が示すように、RegExp を使用して HTML を使用することは常に最適であるとは限りません。

于 2012-09-24T09:19:57.533 に答える