使用 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;
我正在尝试使用 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;