PHP正在HTML中插入回显字符串中没有的字符

时间:2018-12-22 04:54:30

标签: javascript php html

当我尝试在onclick属性中回显按钮时,php在字符串末尾添加=“”。

这将在XAMPP服务器上获取sql数据。它循环遍历并构建一个基本上显示我所有帐单的日历,以及我是否每月都支付帐单。我正在使用AJAX来更新数据库并在每个月的按钮单击上更改其支付价值。

我尝试了使用单引号和双引号以及在字符串内转义引号的各种方法,但仍然无法正确输出。

echo $billName
foreach ($months as $v) {
//$clickstring = 'onclick="setCalendar("'.$billName.'","'.$v.'")';
$clickstring = "onclick=\"setCalendar(\"".$billName."\",\"".$v."\")";
if ($row["$v"] == "1") {
echo '<button class="paidBtn green-text"'.$clickstring . '><i class="fa fa-check" aria-hidden="true"></i></button>';
} else {
echo '<button class="unpaidBtn red-text"'.$clickstring.'><i class="fa fa-times" aria-hidden="true"></i></button>';
}

例如,在第一次迭代中$ billname =“ Amazon”;和$ v =“ jan”。 在第一次回声中,亚马逊是正确的。但是,当它在双击中使用相同的变量时,它将在其前面插入一个空格,并且似乎执行了strtolower()。正确插入了jan,但是此后放置了多余的字符和引号。这是浏览器的html输出:

<button class="unpaidBtn red-text" onclick="setCalendar(" amazon","jan")=""><i class="fa fa-times" aria-hidden="true"></i></button>

2 个答案:

答案 0 :(得分:1)

问题是您要回显的html看起来像这样

onclick="setCalendar("something", "month")"

请注意,您在该HTML属性的双引号内有双引号了吗?您不能这样做,因为它过早地结束了onclick。您可以解决各种方法,例如用\来转义,但这会变得很复杂,因为然后您的php必须转义看起来像\\的\,这简直太疯狂了。

一种重写此方法的可能方法,对onclick参数使用单引号

echo $billName;

foreach ($months as $v) {
    $className = ($row[$v] == 1) ? 'paidBtn green-text' : 'unpaidBtn red-text';
    $icon = ($row[$v] == 1) ? 'check' : 'times';
    echo "<button class=\"$className\" onclick=\"setCalendar('$billName', '$v'\")>";
    echo "<i class=\"fa fa-$icon\" aria-hidden=\"true\"></i></button>";
}

我还用三元数对此进行了重构,并把具有html的if两次取出,这有点多余IMO。并取出了字符串连接以使其更易于阅读。

答案 1 :(得分:0)

我找到了解决方案。如果有人遇到相同的问题,我将不提问题。     $ clickstring =“ onclick = \” setCalendar('“。$ billName。”','“。$ v。”')\“”;