【问题标题】:PHP Encapsulate variable as stringPHP 将变量封装为字符串
【发布时间】:2018-09-22 21:33:34
【问题描述】:

我有这个为下拉菜单生成链接的循环。

$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>

感谢任何和所有的指导或批评。 如果您发现任何可能形成的不良习惯,请不要犹豫,烤我。

【问题讨论】:

  • 考虑将json_encodehtmlentities结合使用。

标签: php string variables


【解决方案1】:

你需要记住用 \ 转义特殊字符

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

或者如果你想使用双引号

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

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

【讨论】:

  • 我完全忘记了。感谢您的及时回复。
【解决方案2】:

正如 bishop 所建议的,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>";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-21
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 2023-03-15
    • 2014-09-22
    • 2018-02-08
    相关资源
    最近更新 更多