Php 如何求值()字符串的一段
我有一个字符串,其中包含HTML和PHP,当我从数据库中提取该字符串时,它会回显到屏幕上,但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可以在任何给定的时间
$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混合使用