javascript - 在 HTML 链接中使用 javascript 变量时的正确语法

标签 javascript php html

我只是想组合一个简单的 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, '&amp;')
      .replace(/</g, '&lt;')
      .replace(/>/g, '&gt;')
      .replace(/"/g, '&quot;')
      .replace(/'/g, '&#39;');
} 

您还必须将字符串中的 " 转义为 \",以便它们能够正确解析。这给了我们:

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/

相关文章:

php - Joomla 3.0 菜单 fatal error

php - 引用 - 这个错误在 PHP 中意味着什么?

javascript - 此警告消息是什么意思? 'img elements must have an alt prop, either with meaningful text, or an empty string for decorative images'

javascript - API JSON 响应 选择最低价格

php - 如何根据列内容前 4 个字母创建索引?

javascript - 使用 Js 在 html 表单中输入正确的密码时导航到 url

HTML 正文边距和填充设置为零会导致框中的图像被裁剪

javascript - img.src 不适用于 Firefox,但适用于 Chrome

javascript - JS 中的柯里化(Currying) : Pass additional variable to callback without changing the callback signature

javascript - onclick() 在嵌套在 <marquee> 中的 <div> 中没有响应