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