我只是想组合一个简单的 html (php) 链接并包含一个 JS 变量。这就是我所拥有的,但语法不正确。有什么建议吗?
$.each(playlist, function(index, val) {
playlistHtml += "<form name="form" method="post" action="../_inc/process_track_move.php?track="+val.sources[0].title"
});
最佳答案
您通常不应该在 JavaScript 中手动组装原始 HTML;很容易出错。在您的情况下,即使您的代码有效,它也容易受到编码错误和 XSS 安全问题的影响,因为它没有正确编码属性值。
更安全的选择是使用 DOM API、框架或默认安全的模板引擎来创建您需要的元素,它们会自动处理编码属性值。
以下是我们如何使用 DOM API 代替原始 HTML 来处理您的案例。
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, ''');
}
您还必须将字符串中的 "
转义为 \"
,以便它们能够正确解析。这给了我们:
playlistHtml += "<form name=\"form\" method=\"post\" action=\"../_inc/process_track_move.php?track=" + textToHtml(val.sources[0].title) + "\"></form>";
关于javascript - 在 HTML 链接中使用 javascript 变量时的正确语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44877430/