あなたのように、二重引用符内の引用符を選抜すべきです。間違ってしまうのは簡単です。あなたのケースでは、たとえあなたのコードが働いていても、エンコーディングエラーやXSSのセキュリティ問題が属性値を適切にエンコードしないため、脆弱になります。
より安全な選択肢は、必要な要素を作成するためにDOM API、フレームワーク、またはデフォルトセーフテンプレートエンジンを使用することです。自動的にエンコード属性値を管理します。
ここでは、生のHTMLの代わりにDOM APIを使用する方法について説明します。
var playlist = document.createElement('div'); // or document.querySelector('#playlist')?
$.each(playlist, function(index, val) {
var form = document.createElement('form');
form.setAttribute('name', 'form');
form.setAttribute('method', 'post');
form.setAttribute('action', '../_inc/process_track_move.php?track=' + val.sources[0].title);
playlist.appendChild(form);
});
playlistHtml += playlist.innerHTML;
作成した要素をドキュメントに直接追加することも、元のようにHTML文字列に変換することもできます。
生のHTML連結を本当に使用する必要がある場合は、+
のHTMLにテキスト文字列を書くことはできません。セキュリティの脆弱性やエラーを避けるためには、最初にHTMLとしてエンコードする必要があります。最低でも、それはこのように機能を使用することを意味:
function textToHtml(s) {
return s
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
}
それらを正しく構文解析するためにあなたはまた、\"
として、あなたの文字列の中"
Sをエスケープする必要があります。これは、私たちを与える: "これは文字列ではない実際の値となってしまいます+ ../_inc/process_track_move.php?track= + - >"
playlistHtml += "<form name=\"form\" method=\"post\" action=\"../_inc/process_track_move.php?track=" + textToHtml(val.sources[0].title) + "\"></form>";
アクション= + val.sources [0] .title " – Conceptz
あなたは正しいです、答えを編集します、ありがとう:) – shaina