Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何求值()字符串的一段_Php_String_Eval - Fatal编程技术网

Php 如何求值()字符串的一段

Php 如何求值()字符串的一段,php,string,eval,Php,String,Eval,我有一个字符串,其中包含HTML和PHP,当我从数据库中提取该字符串时,它会回显到屏幕上,但PHP代码不会显示。字符串如下所示: $string = 'Hello <?php echo 'World';?>'; echo $string; 源代码 Hello <?php echo 'World';?> 你好 当我查看源代码时,我可以看到那里的php行。所以我需要做的是eval(),就是字符串中的php段 一个要考虑的事情是PHP可以在任何给定的时间

我有一个字符串,其中包含HTML和PHP,当我从数据库中提取该字符串时,它会回显到屏幕上,但PHP代码不会显示。字符串如下所示:

   $string = 'Hello <?php echo 'World';?>';
   echo $string;
源代码

   Hello <?php echo 'World';?>
你好 当我查看源代码时,我可以看到那里的php行。所以我需要做的是eval(),就是字符串中的php段

一个要考虑的事情是PHP可以在任何给定的时间内位于字符串的任何地方。 *我只是想澄清一下,我的PHP配置是正确的,这是一个从数据库中转储一些PHP而不呈现的情况,因为我在回显一个包含PHP代码的变量,它无法运行*


再次感谢您对我的帮助

您不应该评估php代码,只需运行它即可。需要安装php解释器,并正确配置apache+php。那么这个.php文件应该输出helloworld

对编辑的回答: 使用preg_replace_回调获取php部件,对其求值,将输入替换为输出,然后回显。
但是如果您应该评估来自数据库的东西,我几乎可以肯定,这是一个设计错误。

您不应该评估php代码,只需运行它。需要安装php解释器,并正确配置apache+php。那么这个.php文件应该输出helloworld

$str = "Hello
<?php echo 'World';?>";

$matches = array();

preg_match('/<\?php (.+) \?>/x', $str, $matches);

eval($matches[1]);
对编辑的回答: 使用preg_replace_回调获取php部件,对其求值,将输入替换为输出,然后回显。 但是若您要评估来自数据库的内容,我几乎可以肯定,这是一个设计错误。

$str=“您好。”
$str = "Hello
<?php echo 'World';?>";

$matches = array();

preg_match('/<\?php (.+) \?>/x', $str, $matches);

eval($matches[1]);
"; $matches=array(); preg_match('//x',$str,$matches); eval($matches[1]);
这会起作用,但就像其他人已经和将要提出的那样,这是一个可怕的想法。您的应用程序体系结构决不应该围绕在数据库中存储代码而展开

最简单的是,如果您的页面总是需要显示字符串,请将这些字符串存储在数据库中,而不是生成它们的代码。真实世界的数据比这更复杂,但必须始终在数据库中正确建模

编辑:需要使用preg\u replace\u回调进行调整,以正确删除源代码/插值。

$str=“Hello
";
$matches=array();
preg_match('//x',$str,$matches);
eval($matches[1]);
这会起作用,但就像其他人已经和将要提出的那样,这是一个可怕的想法。您的应用程序体系结构决不应该围绕在数据库中存储代码而展开

最简单的是,如果您的页面总是需要显示字符串,请将这些字符串存储在数据库中,而不是生成它们的代码。真实世界的数据比这更复杂,但必须始终在数据库中正确建模

编辑:需要使用preg\u replace\u回调来正确删除源代码/插入代码。

eval()应该可以正常工作,只要代码是正确的PHP并以分号结尾。不如先去掉php标记,然后评估它

以下示例经过测试并正常工作:

<?php
$db_result = "<?php echo 'World';?>";
$stripped_code = str_replace('?>', '', str_replace('<?php', '', $db_result));
eval($stripped_code);
?>
只要代码是正确的PHP并以分号结尾,eval()就可以正常工作。不如先去掉php标记,然后评估它

以下示例经过测试并正常工作:

<?php
$db_result = "<?php echo 'World';?>";
$stripped_code = str_replace('?>', '', str_replace('<?php', '', $db_result));
eval($stripped_code);
?>

您能在输出源代码中看到php行吗?是的,正如我提到的,PHP就在源代码中。我对代码进行了一些清理,试图更好地说明这个问题……为其他可能对这个问题感到困惑的人澄清——Tisch在这里试图做的是从数据库中取出HTML和PHP的混合物,然后将其插入另一个PHP源文件中运行时。很可能这是解决问题的错误方法,但这正是他们所要求的。你能看到输出源中的php行吗?是的,正如我提到的,PHP就在源代码中。我对代码进行了一些清理,试图更好地说明这个问题……为其他可能对这个问题感到困惑的人澄清——Tisch在这里试图做的是从数据库中取出HTML和PHP的混合物,然后将其插入另一个PHP源文件中运行时。很可能这是解决问题的错误方法,但这正是他们所要求的。谢谢,但事实并非如此,因为php的行在字符串中。。。我有一个变量,其中存储了字符串。当我将变量回送到屏幕上时,它也回送了原始的PHP代码……对第二部分的回答:谢谢,我会试试看。你可能在写设计错误!这是我的个人项目,所以这都是我自己的设计。。。这很可能是错的!但是您可以活到老学到老:)将代码保存在php源文件中,将内容保存在数据库中。例如,您可以将bbcode标记放入数据库存储的内容中并对其进行解析,但强烈建议不要将php代码和内容混合使用。它容易出错,造成安全问题,性能差,难以维护等。将代码和内容分开。对具体问题了解得越多,我就越能帮上忙。我同意把事情分开处理。我正在尝试实现与drupal的块系统类似的功能。。。在那里你可以写一个快速块,然后把它放在你喜欢的地方。理想情况下,我希望能够在以后的某个日期在我喜欢的框中回显如下内容:谢谢,但事实并非如此,因为php的行在字符串中。。。我有一个变量,其中存储了字符串。当我将变量回送到屏幕上时,它也回送了原始的PHP代码……对第二部分的回答:谢谢,我会试试看。你可能在写设计错误!这是我的个人项目,所以这都是我自己的设计。。。这很可能是错的!但是您可以活到老学到老:)将代码保存在php源文件中,将内容保存在数据库中。例如,您可以将bbcode标记放入数据库存储的内容中并对其进行解析,但强烈建议不要将php代码和conten混合使用