我如何使用单引号与嵌套调用的eval()?

问题描述 投票:2回答:1

我试图用单引号与嵌套调用eval()

eval('eval(\'echo 'hi\';\');');

然而,这会触发以下错误:

语法错误,意想不到 'HI'(T_STRING)

我如何使用单引号和解决这个问题?

php eval
1个回答
1
投票

你有逃逸单引号的问题。您可以使用双引号代替-"hi"代替'hi'

eval('eval(\'echo "hi";\');');

如果你需要使用单引号,逃避单引号的反斜杠将自己需要进行转义,有一对额外的反斜杠(\\);即:

eval('eval(\'echo \\\'hi\\\';\');');

这产生了:

你可以想像,这将变得混乱很快为嵌套水平的提高。

值得一提的是,eval()被认为是危险的,你只应该在非常谨慎的情况下,你必须彻底评估,有在使用它没有任何风险使用它,有没有更好的方法来达到你正在尝试做的。

正如PHP documentation指出:

小心eval()语言结构是非常危险的,因为它允许任意PHP代码执行。它的使用因而气馁。如果你仔细核实,有没有其他的选择,而不是使用此结构,要特别注意不要通过任何用户没有正确验证事前它提供的数据进去。

值得一搜索堆栈溢出一些discussion on its usage

希望这可以帮助 :)

© www.soinside.com 2019 - 2024. All rights reserved.