PHP echo 没有产生正确的结果,将字符串转为小写

PHP echo not producing correct result, turning string lowercase

我正在尝试回显调用 javascript 函数的动态标签,但参数没有正确回显。他们应该保留他们的大写字母而不是增加间距。为什么要这样做?

我试过删除变量并用我想要的直接回显字符串,但它仍然显示不正确。

我需要的:

echo '<a href="'.$info[0].'" onClick="redirTrackCalcBtn("'.$bname.'", "'.$info[0].'")"><img src="'.$info[1].'"/></a>'

纯字符串版本:

echo '<a href="/calc" onclick="redirTrackCalcBtn("Test_Button_1", "/calc")"><img src="/images/calc-eng-desktop.png"></a>'

输出:

<a href="/calc" onclick="redirTrackCalcBtn(" test_button_1",="" "="" calc")"="">
    <img src="/images/calc-eng-desktop.png">
</a>

应该输出:

<a href="/calc" onclick="redirTrackCalcBtn("Test_Button_1", "/calc")">
    <img src="/images/calc-eng-desktop.png">
</a>

我也试过:

echo "<a href=\"".$info[0]."\" onClick=\"redirTrackCalcBtn(\"".$bname."\", \"".$info[0]."\")\"><img src=\"".$info[1]."\"/></a>";

但仍然输出:

<a href="/calc" onclick="redirTrackCalcBtn(" test_banner_1",="" "="" calc")"=""><img src="/images/calc.png"></a>

根据 Dharman 的回复,我也尝试过:

echo '<a href="'.$info[0].'" 
    onClick=\"redirTrackCalcBtn("'.$bname.'", "'.$info[0].'")\"
    ><img src="'.$info[1].'"/></a>'

这输出:

<a href="/calc" onclick="\&quot;redirTrackCalcBtn(&quot;Test_Banner_1&quot;," "="" calc")\"="">
<img src="/images/preguntanos-h-es.png">
</a>

编辑上下文: 它适用于由 WordPress 提供支持的博客内容中的动态横幅。

需要escape one set of the double-quotes,否则会混在一起。由于你在PHP中使用了single-quotes,你需要在HTML/JavaScript中使用double,然后再次使用single-quotes,但是这次从PHP.[=中转义了16=]

echo '<a href="'.$info[0].'" onClick="redirTrackCalcBtn(\''.$bname.'\', \''.$info[0].'\')" ><img src="'.$info[1].'"/></a>';

JavaScript 个变量包含在 \'

echo '<a href="'.$info[0].'" onClick=\'redirTrackCalcBtn("'.$bname.'", "'.$info[0].'")\' ><img src="'.$info[1].'"/></a>';

onlick 部分现在用转义引号括起来,其他一切保持不变。

你有 3 种语言混合在一起,3 层:

PHP will use '
-->HTML will use "
---->JavaScript will use \'

每一个都使用双引号或单引号,您只有两个可供选择。因此你需要逃脱其中之一。

一个更简单的例子:

echo '<a onclick="alert(\'hi\')">Hello</a>';

也许克服引号转义混淆的更简单方法是以不同的方式分配字符串。您可以使用 heredoc 表示法删除一层引用。

as an aside, your "correct" output is not correct:
onclick="redirTrackCalBtn("Test_Button_1, "/calc")">

<a href="/calc" onclick="redirTrackCalcBtn("Test_Button_1", "/calc")">
  <img src="/images/calc-eng-desktop.png">
</a>

您的 HTML 应如下所示:

<a href="/calc" onclick="redirTrackCalcBtn('Test_Button_1', '/calc')">
  <img src="/images/calc-eng-desktop.png">
</a>

使用 Heredoc 表示法,您不必连接和转义,只需按照 HTML 应该的方式写出来:

$link =<<<LINKINFORMATION
<a href="{$info[0]}" onclick="redirTrackCalcBtn('{$bname}', '{$info[0]}')">
  <img src="/images/calc-eng-desktop.png">
</a>
LINKINFORMATION;

echo $link;

您可以使用以下技巧简化表达式...

  1. HTML 接受属性的单引号或双引号。
  2. PHP 可以计算双引号分隔字符串内的变量。这可以让你的表达更容易理解。

所以基于此,答案是:

<?php
echo "<a href='{$info[0]}' onClick='redirTrackCalcBtn(\"{$bname}\", \"{$info[0]}\")'><img src='{$info[1]}'/></a>";

这将给出以下结果...

<a href='/calc' onClick='redirTrackCalcBtn("test_button_1", "/calc")'><img src='/images/calc-eng-desktop.png'/></a>

在您的问题中,您显示了纯字符串版本以及您认为的正常输出。这两个输出都是错误的。你不能使用像 onclick="redirTrackCalcBtn("Test_Button_1", "/calc")" 这样的东西,因为左括号后面的双引号完成了 onclick 属性,它变成了 onclick="redirTrackCalcBtn("。之后,浏览器将尽力寻找以下属性及其值。因此,您看到的 space 只是属性之间的自然 space。

总之,echo没有错。