首页 > 解决方案 > 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 = "一月"。在第一个回声亚马逊是正确的。但是,当它在双击中使用相同的变量时,它会在它之前插入一个空格,并且似乎执行 strtolower()。jan 插入正确,但之后会添加额外的字符和引号。这是浏览器的html输出:

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

标签: javascriptphphtml

解决方案


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

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

请注意您是如何在该 HTML 属性的双引号内添加双引号的?你不能这样做,因为它会过早地结束你的点击。您可以通过各种方式解决这个问题,例如使用 \ 转义它,但这会变得复杂,因为您的 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 中有点多余。并取出字符串连接以使其更易于阅读。


推荐阅读