这可能是我四次在网上提出这个问题而没有一个有效的解决方案。
这让我发疯了。
我会尽量让它变得更容易理解。
我在数据库表中有一些代码,如下所示:
<div> Hello my name is {$name}</div>
<span> I come from {$city}</span>
<div>I am {$age} years old</div>
我再说一遍,这篇文章来自mySQL表,我使用以下代码进行选择:
function getPageContent($page) {
$q='SELECT * FROM pages WHERE Page="'.$page.'"';
$r=mysql_query($q) or die(mysql_error());
while($row = mysql_fetch_array($r)) {
$content= $row['Content'];
}
return $content;
}
正如您所看到的,上面的代码中有一些PHP变量,例如{$age}
或{$city}
,它们只是示例,因为我不知道确切的内容。
我需要做的是找到一种方法让PHP获取$content
变量的内容(来自DB SELECT的字符串),以正常识别括号{$foo}
内的变量PHP变量并在回显最终代码之前运行它们。
正如您可能看到$ content变量可能包含不同且未知的变量,因此我必须找到一种方法来获取它们所代表的变量。
我不知道这里使用的正确的是eval()
。但似乎eval()仅适用于{echo 'value'}
而不适用于变量{$foo}
或{echo $foo}
,因为根本不会识别变量。
有人有解决方案吗?
这让我发疯了。
这个概念是为用户提供在mySQL数据库中输入HTML文本的可能性,并在括号{}
中包含他们想要的任何PHP代码。这对于多语言网站来说非常有用..等等..
我希望你理解我的观点。
由于
答案 0 :(得分:1)
不要为此使用eval。只需进行简单的搜索和替换即可。
从您的问题来看,很难理解存储$name
,$city
和$age
的确切位置。所以,我将从你检索到这些信息的那一刻开始。让我们说它是这样的:
$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);
此外,在您提供的示例代码中,$content
变量在while
循环的每次迭代中不断被覆盖。也许,这就是你想要发生的事情,或者你希望将它连接起来。
在阅读了一些评论之后,您似乎需要一个更加动态的解决方案。您可以通过以下方式实现:
if (preg_match_all('/{\$\w+}/', $content, $matches)) {
foreach ($matches[0] as $var) {
// var now contains the {$variableName}.
}
}
这将在您的HTML中找到变量,然后您可以循环,与包含实际名称/值对的文件进行比较。然后使用str_replace
,如上所示。
答案 1 :(得分:0)
为什么不这样做?
<div> Hello my name is <?=$name?></div>
<span> I come from <?=$name?></span>
<div>I am <?=$age?> years old</div>
当然,要实现此功能,您需要启用short_open_tag
指令。如果没有启用,您可以在更多代码中完成相同的操作:
<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>
你应该注意恶意用户获取对这个脚本的访问权限,因为你想象它的方式,他们将能够执行他们想要的任何代码。 请务必清理此脚本的输入和输出!