PHP生成HTML按钮传多参数报错:Uncaught SyntaxError
问题解决:PHP循环生成HTML按钮传参的语法错误
错误原因
你的代码里onclick属性用单引号包裹,但传递字符串参数时又用了单引号,导致引号嵌套冲突,提前闭合了onclick的属性值,最终生成的HTML语法无效,触发Uncaught SyntaxError: Unexpected end of input错误。
比如生成的错误HTML会是这样:
<button class='btn btn-danger' onclick='deleteEntry(1,'xxx','yyy')'>Eliminar</button>
这里第二个单引号会直接闭合onclick的属性值,剩下的xxx','yyy')就成了无效的HTML代码。
解决方案
方案1:转义引号并调整嵌套方式
将echo的外层字符串用单引号包裹,内部HTML属性用双引号,同时对字符串参数的单引号进行转义:
echo '<td><button class="btn btn-danger" onclick="editEntry(' . $row['id'] . ')">Editar</button> <button class="btn btn-danger" onclick="deleteEntry(' . $row['id'] . ',\'' . $row['nombre'] . '\',\'' . $row['signo_solar'] . '\')">Eliminar</button></td>';
这样生成的HTML会是正确的嵌套格式:
<button class="btn btn-danger" onclick="deleteEntry(1,'xxx','yyy')">Eliminar</button>
方案2:使用htmlspecialchars处理参数(更安全)
用htmlspecialchars转义字符串中的特殊字符(包括引号),同时调整引号嵌套,避免冲突的同时防止XSS攻击:
// 提前处理参数,转义特殊字符 $id = $row['id']; $nombre = htmlspecialchars($row['nombre'], ENT_QUOTES); $signo_solar = htmlspecialchars($row['signo_solar'], ENT_QUOTES); // 输出按钮 echo "<td><button class='btn btn-danger' onclick='editEntry($id)'>Editar</button> <button class='btn btn-danger' onclick='deleteEntry($id,\"$nombre\",\"$signo_solar\")'>Eliminar</button></td>";
ENT_QUOTES参数会同时转义单引号和双引号,确保参数中的引号不会破坏HTML语法。
内容的提问来源于stack exchange,提问作者user22741203
相关产品推荐
相关产品推荐

