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

在HTML链接中使用javascript变量时的正确语法,javascript,php,html,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" }); $。每个(播放列表、功能(索引、val){ playlish

我只是想结合一个简单的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"
});
$。每个(播放列表、功能(索引、val){

playlishtml+=“建议和答案,答案:您需要同时使用单引号和双引号。 建议:使用变量将链接从逻辑中删除。这样更容易查看和编辑。这不是必需的,但当您返回时,它会更可读

此示例基于您提供的内容

$.each(playlist, function(index, val) {
    var baseLink = "../_inc/process_track_move.php?rack=";
    playlistHtml += 
"<form name='form' method='post'
action='" + baseLink + val.sources[0].title + "'";
});
$。每个(播放列表、功能(索引、val){
var baseLink=“../\u inc/process\u track\u move.php?rack=“;
播放列表HTML+=

建议和答案,回答:你需要使用单引号和双引号。 建议:使用变量将链接从逻辑中删除。这样更容易查看和编辑。这不是必需的,但当您返回时,它会更可读

此示例基于您提供的内容

$.each(playlist, function(index, val) {
    var baseLink = "../_inc/process_track_move.php?rack=";
    playlistHtml += 
"<form name='form' method='post'
action='" + baseLink + val.sources[0].title + "'";
});
$。每个(播放列表、功能(索引、val){
var baseLink=“../\u inc/process\u track\u move.php?rack=“;
播放列表HTML+=

您应该在双引号内加单引号,如

$.each(playlist, function(index, val) {
    playlistHtml += "<form name='form' method='post' action=' ../_inc/process_track_move.php?track='+val.sources[0].title"
});
$。每个(播放列表、功能(索引、val){

playlishtml+=“您应该在双引号内加单引号,如

$.each(playlist, function(index, val) {
    playlistHtml += "<form name='form' method='post' action=' ../_inc/process_track_move.php?track='+val.sources[0].title"
});
$。每个(播放列表、功能(索引、val){

playliHTML+=“您通常不应该在JavaScript中手动组装原始HTML;这很容易出错。在您的情况下,即使您的代码正常工作,也很容易出现编码错误和XSS安全问题,因为它没有正确编码属性值

更安全的选择是使用domapi、框架或默认的安全模板引擎来创建所需的元素,这些元素将自动处理编码属性值

下面是我们如何在您的案例中使用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;');
} 

您通常不应该在JavaScript中手动组装原始HTML;这很容易出错。在您的情况下,即使您的代码正常工作,也很容易出现编码错误和XSS安全问题,因为它没有正确编码属性值

更安全的选择是使用domapi、框架或默认的安全模板引擎来创建所需的元素,这些元素将自动处理编码属性值

下面是我们如何在您的案例中使用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;');
} 

action=“+../\u inc/process\u track\u move.php?track=+这将以字符串形式结束,而不是实际值-->”+val.sources[0]。title“是的,您是对的,将编辑答案,谢谢。:)action=“+../\u inc/process\u track\u move.php?track=+这将以字符串形式结束,而不是实际值-->“+val.sources[0]。title“是的,你是对的,我会编辑答案,谢谢。”