jQueryトリックは引用符をエンコードせず、IEでは空白を削除します。
Django のエスケープテンプレートタグに基づいていますが、これは既に頻繁に使用/テストされているため、必要なことを行うこの関数を作成しました。
空白の除去の問題の回避策のどれよりも間違いなく単純です(そしておそらくより高速です)。引用符をエンコードします。これは、たとえば属性値内で結果を使用する場合に不可欠です。
function htmlEscape(str) {
return str
.replace(/&/g, '&')
.replace(/"/g, '"')
.replace(/'/g, ''')
.replace(/</g, '<')
.replace(/>/g, '>');
}
// I needed the opposite function today, so adding here too:
function htmlUnescape(str){
return str
.replace(/"/g, '"')
.replace(/'/g, "'")
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/&/g, '&');
}
2013年6月17日更新:最速のエスケープを求めて、次のreplaceAll
メソッドの実装を見つけました:
http ://dumpsite.com/forum/index.php?topic=4.msg29#msg29
(ここでも参照:最速文字列内の文字のすべてのインスタンスを置き換えるメソッド)
いくつかのパフォーマンス結果はここにあります:http :
//jsperf.com/htmlencoderegex/25
replace
上記の組み込みチェーンと同じ結果文字列を提供します。誰かがそれがより速い理由を説明できたら私はとても幸せです!?
2015-03-04の更新:
AngularJSが上記の方法を正確に使用していることに気づきました:
https //github.com/angular/angular.js/blob/v1.3.14/src/ngSanitize/sanitize.js#L435
彼らはいくつかの改良を加えました-それらはあいまいなUnicode問題を処理し、すべての非英数字文字をエンティティに変換しているようです。ドキュメントにUTF8文字セットが指定されている限り、後者は必要ないという印象を受けました。
(4年後)Djangoはまだこれらのことを行わないので、それらがどれほど重要かはわかりません:https :
//github.com/django/django/blob/1.8b1/django/utils /html.py#L44
2016-04-06の更新:
スラッシュをエスケープすることもでき/
ます。これは正しいHTMLエンコーディングには必要ありませんが、OWASPはXSS対策の安全対策として推奨しています。(コメントでこれを提案してくれた@JNFに感謝)
.replace(/\//g, '/');