3
4

1 に答える 1

2

特定のエンティティのコードではなく、元の 7 ビット ASCII 範囲外のものを置き換えるものはどうですか:

str = str.replace(/[^\011\012\015\040-\177]/g, function(x) {
    return '&#' + x.charCodeAt(0) + ';'
})

(正規表現は、空白または「通常の」ASCII 文字以外のものと一致します)

または、キーが置き換えたい文字で、値がエンティティになるようにマップを記述します。

var map = { '£' : '£' }

str = str.replace(/./g, function(x) {
    return (x in map) ? map[x] : x;
});

どちらのバージョンも、セット内の可能なエンティティごとに 1ではなく、正規表現の呼び出しを 1 回だけ行うことに注意してください。これにより、コードはループベースの方法よりもいくらか高速になります。

于 2012-06-20T11:34:08.247 に答える