使用 eval() 执行包含 SimpleHTML 的 PHP 字符串

Using eval() to execute string of PHP that contains SimpleHTML

我正在尝试使用 eval() 来执行一个 SimpleHTML 字符串。我完全了解 eval() 的危险,并且不会对要执行的字符串使用任何用户输入。

$my_data = str_get_html('<html><body><a href=\"https://www.example.com\">Hello!</a></body></html>');

$str = '$my_data->find(\'a\', 0)->attr[\'href\']';

eval ("$str = \"$str\";");

echo $str;

上面的代码没有执行,回显$str后得到:

('a', 0)->attr['href']

$str 字符串的第一部分发生了什么(即 $my_data->find )?如何实际执行 $str 字符串中的代码?

您传递给评估的代码是错误的。您正在尝试评估以下代码:

$str = "$my_data->find('a', 0)->attr['href']";

正确的代码是:

$str = $my_data->find('a', 0)->attr['href'];

或者:

$str = "{$my_data->find('a', 0)->attr['href']}";

此代码有效:

<?php

require __DIR__ . '/simplehtmldom_1_9_1/simple_html_dom.php';

$my_data = str_get_html('<html><body><a href=\"https://www.example.com\">Hello!</a></body></html>');

$str = '$my_data->find(\'a\', 0)->attr[\'href\']';


eval ("$str = $str;");

echo $str;