PHP 让我远离 eval ;) 字符串内的变量
由于我现在不想进入的原因,我有一个像这样的字符串:
<div>$title</div>
使用 mysql_real_escape_string 存储在数据库中。
在正常脚本执行期间,该字符串被解析并存储在变量 $string
中,然后发送到 function($string)
。
在这个函数中,我试图:
function test($string){
$title = 'please print';
echo $string;
}
//I want the outcome to be <div>please print</div>
这似乎是最愚蠢的事情,但就我的一生而言,我无法让它“解释”变量。
我也尝试过,
echo html_entity_decode($string);
echo bin2hex(html_entity_decode($string)); //Just to see what php was actually seeing I thought maybe the $ had a slash on it or something.
当我的思绪不断转向使用 EVAL()
时,我决定在这里发帖。
当然,这只是伪代码。解决这个问题的最佳方法是什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
你的例子有点抽象。但看起来你可以做模板引擎对这些情况做的事情:
现在实际上,
/e
与使用eval几乎相同。但至少这只能替换实际的变量名称。还可以做得更复杂一点。Your example is a bit abstract. But it seems like you could do pretty much what the template engines do for these case:
Now actually,
/e
is pretty much the same as using eval. But at least this only replaces actual variable names. Could be made a bit more sophisticated still.我认为没有办法让它发挥作用。您正在尝试这样的事情:
单引号阻止解释器在字符串中查找变量。当您回显字符串变量时,情况也是如此。
解决方案是一个简单的
str_replace
。但在这种情况下,我真的建议在文本中使用唯一的模板变量。
I don't think there is a way to get that to work. You are trying something like this:
The single quotes are preventing the interpreter from looking for variables in the string. And it is the same, when you echo a string variable.
The solution will be a simple
str_replace
.But in this case I really suggest Template variables that are unique in your text.
你只是不这样做,变量是一个有生命的东西,像这样将它存储在数据库中的字符串中是违反其本质的。
如果您想用变量的内容替换字符串的某些部分,请使用
sprintf()
。示例
然后将其与:一起使用
将导致:
You just don't do that, a variable is a living thing, it's against its nature to store it like that, flat and dead in a string in the database.
If you want to replace some parts of a string with the content of a variable, use
sprintf()
.Example
Then use it with:
will result in:
如果您知道div内的变量是
$title
,则可以str_replace
它。如果您不知道字符串中的变量,可以使用正则表达式来获取它们(我使用了 PHP 手册)。
If you know that the variable inside the div is
$title
, you canstr_replace
it.If you don't know the variables in the string, you can use a regex to get them (I used the regex from the PHP manual).