运行PHP得到一个mySQL结果

运行PHP得到一个mySQL结果,php,Php,这大概是我第四次在没有有效解决方案的情况下在网上问这个问题了 它快把我逼疯了 我会尽量使它更容易理解 我在数据库表中有一些代码,如下所示: <div> Hello my name is {$name}</div> <span> I come from {$city}</span> <div>I am {$age} years old</div> $content = '<div> Hello my name

这大概是我第四次在没有有效解决方案的情况下在网上问这个问题了

它快把我逼疯了

我会尽量使它更容易理解

我在数据库表中有一些代码,如下所示:

<div> Hello my name is {$name}</div>

<span> I come from {$city}</span>

<div>I am {$age} years old</div>
$content = '<div> Hello my name is {$name}</div>

<span> I come from {$city}</span>

<div>I am {$age} years old</div>
';

$city = 'Kansas City';

echo str_replace('{$city}', $city, $content);
正如您可能看到的,在上面的代码中有一些PHP变量,例如
{$age}
{$city}
,它们只是示例,因为我不知道确切的内容

我需要做的是为PHP找到一种方法来获取
$content
变量(来自DB SELECT的字符串)的内容,将括号
{$foo}
中的变量识别为普通PHP变量,并在回显最终代码之前运行它们

正如您可能看到的,$content变量可能包含不同的未知变量,因此我必须找到一种方法来获取这些变量,不管它们代表什么

我不知道这里使用的是不是正确的
eval()
。但是eval()似乎只适用于
{echo'value}
之类的东西,而不适用于变量
{$foo}
,或者
{echo$foo}
,因为变量根本无法识别

有人能解决这个问题吗

这让我快发疯了

其概念是让用户能够在mysqldb中输入HTML文本,并在括号中包含他们想要的任何PHP代码。这对于多语言网站等非常有用

我希望你能理解我的观点


谢谢不要为此使用eval。只需进行简单的搜索和替换

从您的问题中,很难理解
$name
$city
$age
的值到底存储在哪里。所以,我将从您检索到该信息的点开始。假设是这样的:

<div> Hello my name is {$name}</div>

<span> I come from {$city}</span>

<div>I am {$age} years old</div>
$content = '<div> Hello my name is {$name}</div>

<span> I come from {$city}</span>

<div>I am {$age} years old</div>
';

$city = 'Kansas City';

echo str_replace('{$city}', $city, $content);
这将找到HTML中的变量,然后可以循环使用,并与包含实际名称/值对的文件进行比较。然后使用如上所示的str\u replace。

为什么不这样做呢

<div> Hello my name is <?=$name?></div>

<span> I come from <?=$name?></span>

<div>I am <?=$age?> years old</div>

不过,您确实应该注意恶意用户是否能够访问此脚本,因为按照您的设想,他们可以执行所需的任何代码请确保清理此脚本的输入和输出

你真的不想让你的用户执行“他们想要的任何PHP代码”。考虑使用模板引擎,比如OR。我用SimTy尝试过,但是到目前为止,我需要知道变量并给它们赋值。但是我根本不知道内容中的变量。你从某处获得了可用的变量,所以你不知道可能的变量是什么吗?你不需要知道内容中使用了什么。把它们全部替换掉。如果它们不存在,那没关系。你能提供一个样本吗?我试过了,但是我不能用Smarty来抽象代码…我对它只是一个新手,我正在浪费很多时间试图理解逻辑…它假设我知道内容中有哪些变量。但实际上我不知道它们,因为它们是由用户插入的。它应该是抽象的。你的代码要求我指定每一个变量。对不起,我没有真正的理由投反对票。在你评论之前,我正在写评论。无论如何,我对这个答案的担心是,它鼓励在用户提交的文本上使用
eval()
。@MichaelMior这是一个合理的担忧,但是我认为在从数据库检索输入之前应该对输入进行卫生处理。我在回答中添加了一条注释,以防出现这种情况;)我尝试了两种解决方案,有和没有短标签。结果是零或错误。@DiegoP。描述一下。。。错误说明了什么?为什么您希望用户能够运行自己的代码呢?wazoo上的安全风险…@esqew同意应对输入进行消毒。但是,当下一个开发人员出现,不考虑输入清理,开始在数据库的同一个表中转储内容时,情况会怎样呢?我想这只是自找麻烦。
<div> Hello my name is <?php echo $name ?></div>

<span> I come from <?php echo $name ?></span>

<div>I am <?php echo $age ?> years old</div>