PHP将变量封装为字符串

时间:2018-09-22 21:33:34

标签: php string variables

我有这个循环,为下拉列表生成链接。

$count = count($this->contents);
for($i = 0; $i < $count; $i++)
{
        $this->ret .= "<a onclick='changeFDD(" . strval($this->contents[$i]) . ")'>" . $this->contents[$i] . "</a>";
}

这将产生以下列表

<div id="fddContentID" class="fddContent">
<a onclick="changeFDD(Mr.)">Mr.</a>
<a onclick="changeFDD(Mrs.)">Mrs.</a>
<a onclick="changeFDD(Ms.)">Ms.</a>
</div>

问题是我需要参数为字符串。我可以想象,strval可以做到这一点。

当我只是尝试插入单引号时,它会使结构有些偏离。

PHP用单引号

$this->ret .= "<a onclick='changeFDD('" . strval($this->contents[$i]) . "')'>" . $this->contents[$i] . "</a>";

返回的HTML结果

<div id="fddContentID" class="fddContent">
<a onclick="changeFDD(" mr.')'="">Mr.</a>
<a onclick="changeFDD(" mrs.')'="">Mrs.</a>
<a onclick="changeFDD(" ms.')'="">Ms.</a>
</div>

我了解结果的原样,我不了解如何封装该变量,以便Javascript正确处理它。

更多详细信息

我正在使用PHP构建表单,并使用按钮和div创建了一个自定义下拉框,我可以使用Javascript和CSS来控制其可见性。在此下拉框中,每个项目都是一个链接。

当您单击链接时,它将运行Javascript函数changeFDD(nVal)

function changeFDD(nVal) {
  document.getElementById("fddBtnID").value = nVal;
  alert("test");
}

nVal对应于按钮将具有的新值。

当我生成此下拉框时,一种遍历数组的方法将显示这些链接,唯一的问题是我在用引号封装变量时遇到了麻烦,因为该区域中已有很多引号。我尝试了一些函数,例如strval并将其强制转换为字符串,但结果保持不变。

这是下拉菜单的布局

<div class="FDDWrap">
<button onclick="fddDrop()" id="fddBtnID" class="fddBtn">Mr.</button>
<div id="fddContentID" class="fddContent">
<a onclick="changeFDD(Mr.)">Mr.</a>
<a onclick="changeFDD(Mrs.)">Mrs.</a>
<a onclick="changeFDD(Ms.)">Ms.</a></div>
</div>

任何指导和批评都值得赞赏。 如果您发现任何可能形成的不良习惯,请不要犹豫,要烘烤我。

2 个答案:

答案 0 :(得分:1)

主教建议json_encode是实现此目的的好方法。

代替

$this->ret .= "<a onclick='changeFDD(" . strval($this->contents[$i]) . ")'>" . $this->contents[$i] . "</a>";

json_encode轻松完成了

$this->ret .= "<a onclick='changeFDD(" . json_encode($this->contents[$i]) . ")'>" . $this->contents[$i] . "</a>";

答案 1 :(得分:1)

您需要记住使用\

转义特殊字符的情况。
$ret .= '<a onclick=\'changeFDD(\'' . $contents[$i] . '\')>' . $contents[$i] . "</a>";

或者如果您想使用双引号

 $ret .= "<a onclick='changeFDD('{$contents[$i]}')'>{$contents[$i]}</a>";

两者都会返回相同的结果。