PHP echo无法产生正确的结果,将字符串变成小写

时间:2019-06-11 22:45:04

标签: javascript php echo

我正在尝试回显动态标签,该标签调用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>

根据达曼的回应,我也尝试过:

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驱动的博客内容中的动态横幅。

3 个答案:

答案 0 :(得分:1)

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

  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("。之后,浏览器将尽力查找以下属性及其值。因此,您看到的空间只是属性之间的自然空间。

最后,echo没什么问题。

答案 1 :(得分:0)

您需要escape one set of the double-quotes,否则它们会混合在一起。由于您在PHP中使用单引号,因此需要在HTML / JavaScript中使用double,然后再次使用单引号,但这一次不使用PHP。

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>';

答案 2 :(得分:0)

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

  

顺便说一句,您的“正确”输出不正确:
  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;