在echo语句中混合使用html和php变量

时间:2012-06-30 04:50:01

标签: php html

这可能是我在一个语句中使用单引号和双引号的问题。但我有这段代码:

echo '<form>
      <input type="submit" value="$number" onClick="function();">
      </form>'

这个问题是提交按钮说的是短语$number而不是该变量的值。

所以我环顾四周找到了这个解决方案:

echo "<form>
      <input type='submit' value='$number' onClick='function();'>
      </form>

这正确输出$ number的值,但我习惯在echo语句周围使用单引号,并希望保持这种方式。为什么只将所有单引号转换为双引号,并将单引号转换成单引号来解决问题?是否对第一段代码进行了修改,这样我就可以在echo上保留单引号,并在属性上加双引号?

8 个答案:

答案 0 :(得分:11)

在PHP中,双引号字符串会自动解析其中包含的任何变量,但单引号字符串则不会。因此:

$myVar = 21;
echo "myVar: $myVar"

输出文字:myVar: 21

鉴于:

$myVar = 21;
echo 'myVar: $myVar'

输出文字:myVar: $myVar

您的代码存在的一个问题是,在HTML中,元素属性的值必须用双引号括起来,而不是单引号。我知道有些浏览器会接受这种形式(甚至根本没有引号),但这不是正确的方法。

有各种方法可以正确地实现您的愿望。

方法一:转义双引号字符串:

$myVar = 21;
echo "<div id=\"$myVar\"></div>";

虽然这可能是一个相当不优雅的解决方案,但它会起作用。

方法二:将字符串连接与单引号或双引号字符串结合使用:

$myVar = 21;
echo '<div id="' . $myVar . '"></div>';

这为IMO提供了更好的解决方案,因为如果您愿意,可以在其中使用函数调用或任何其他PHP代码。

警告:

请注意,当您不确定$myVar的内容时(即用户输入),将其直接放入HTML代码是跨站点脚本(XSS)形式的安全漏洞)。想象一下,用户输入的内容如下:

lol"><script>alert('XSS!');</script></div><div id="lol2

这将导致生成的HTML代码包含以下内容:

<div id="lol"><script>alert('XSS!');</script></div><div id="lol2"></div>

这只是一个良性示例,但攻击者可以轻松使用相同的技术窃取用户的cookie(假装以该用户身份登录)。这里的消息是,当您不是100%确定变量的内容时,请不要直接将其插入HTML代码中。相反,请致电htmlspecialchars($myVar)。这将转化为以下内容:

$myVar = $_POST['whatever'];
echo '<div id="' . htmlspecialchars($myVar) . '"></div>';

答案 1 :(得分:2)

在PHP中,处理和评估双引号内的变量,而在单引号中,所有内容都被视为字符串的一部分。

这里有一个更好的解释: http://www.trans4mind.com/personal_development/phpTutorial/quotes.htm

来自上述链接的双引号示例:

$something="Oh something";
echo "My answer is $something.<br>";
//result is: My answer is Oh something

以上链接中的单引号示例:

echo 'My answer is $something.<br>';
//result is: My answer is $something.

答案 2 :(得分:1)

当您使用单引号时,除了单引号外,内部的所有内容都是字面上的。当使用双引号时,任何以美元符号($)开头的东西都被假定为PHP的变量。使用变量时,我通常喜欢用双引号启动回声。

答案 3 :(得分:1)

如果您想继续使用单引号,则需要使用追加运算符(句点)。

echo '<form>
      <input type="submit" value="' . $number . '" onClick="function();">
      </form>';

答案 4 :(得分:1)

你可以这样做,避免整首歌曲和舞蹈。我觉得它更容易阅读。

<form>
    <input type="submit" value="<?php echo $number; ?>" onClick="myFunction()">
</form>

答案 5 :(得分:1)

这对我输出

    echo '<link rel="apple-touch-icon-precomposed" sizes="57x57" href='. ${base_url_favicon} . '/apple-touch-icon-57x57.png />'."\n";
echo "<link rel='apple-touch-icon-precomposed' sizes='57x57' href='${base_url_favicon}/apple-touch-icon-57x57.png' />\n";

答案 6 :(得分:0)

PHP将单引号和双引号字符串区分为不同的东西。单引号字符串是文字,您希望它们按原样输出。对于任何PHP变量以及适当的替换,都要对双引号字符串进行解释(扫描)。

这只是该语言的一个特征(也是一个有用的特征)。我实际上建议您习惯在所有语言中使用双引号作为字符串。没有语言是不可接受的,并且在静态类型语言(C,C ++,Java,...)中,单引号表示字符,而双引号表示字符串。也就是说,String foo = 'my string';在Java中会出错,就像C或C ++中的char * foo = 'my string';一样。但是,char foo = 'a';String foo = "my string";

一样有效

只有当你需要从PHP中剔除最后几纳秒的性能时,你才能通过将双引号字符串转换为单引号字符串。在其他语言中没关系。 Afaik,PHP是唯一一种使这个字符串特异于双引号和单引号的语言。

答案 7 :(得分:0)

PHP在双引号字符串上执行所谓的变量插值,这意味着将搜索字符串以查找它们可能包含的任何变量,其值将在字符串中替换。如果要保留单引号,则需要将字符串和变量连接在一起,如下所示:

echo '<form>
<input type="submit" value="' . $number . '" onClick="function();">
</form>';

或者,如果你想保留双引号,你可以转义你想要打印的双引号:

echo "<form>
<input type=\"submit\" value=\"$number\" onClick=\"function();\">
</form>"