首页 > 解决方案 > Eval 替换和解析 PHP 字符串中的变量

问题描述

$html = '<html><body>$DATA</body></html>';

$DATA = "<h1>Hi</h1>";

eval("\$html = \"$html\";");
echo $html;

上面的代码将正确解析 $DATA 的变量。尽管

$html = '<html><body>$DATA</body></html>';

$DATA = "<h1>Hi</h1>";

$html = "$html";

echo $html;

这段代码不会。为什么?这两者有什么区别?

eval("\$html = \"$html\";");等于只是$html = "$html";吗?

为什么第一个有效而另一个无效?


就像我上面的例子一样;$DATA是并且必须在$html. 就是这样:)。在其他情况下,我什至不会有问题和打扰。

但这是......为什么第一个有效而第二个无效。以及如何使第二个起作用?但主要是为什么它实际上不起作用。

标签: phpeval

解决方案


在第一种情况下$DATA, inside$html在 期间被评估eval(),并且此时$DATA被定义(因为,​​在之前定义eval())。

在第二种情况下,$DATA在这条线上进行插值,此时$html = '<html><body>$DATA</body></html>';未定义$DATA

$DATA = "<h1>Hi</h1>";
$html = "<html><body>$DATA</body></html>";

上面的代码有效,因为$DATA是在评估之前定义的。

正如@NigelRen 指出的那样,在第二种情况下,字符串使用单引号,并且变量不会插入“单引号”字符串中。


推荐阅读