繁体   English   中英

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

[英]Mixing html and php variables inside an echo statement

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

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

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

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

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

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

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

在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.

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

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

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

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

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

这对我来说也是如此

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM