我试图用单引号与嵌套调用eval()
:
eval('eval(\'echo 'hi\';\');');
然而,这会触发以下错误:
语法错误,意想不到 'HI'(T_STRING)
我如何使用单引号和解决这个问题?
你有逃逸单引号的问题。您可以使用双引号代替-"hi"
代替'hi'
:
eval('eval(\'echo "hi";\');');
如果你需要使用单引号,逃避单引号的反斜杠将自己需要进行转义,有一对额外的反斜杠(\\
);即:
eval('eval(\'echo \\\'hi\\\';\');');
这产生了:
嗨
你可以想像,这将变得混乱很快为嵌套水平的提高。
值得一提的是,eval()
被认为是危险的,你只应该在非常谨慎的情况下,你必须彻底评估,有在使用它没有任何风险使用它,有没有更好的方法来达到你正在尝试做的。
正如PHP documentation指出:
小心
eval()
语言结构是非常危险的,因为它允许任意PHP代码执行。它的使用因而气馁。如果你仔细核实,有没有其他的选择,而不是使用此结构,要特别注意不要通过任何用户没有正确验证事前它提供的数据进去。
值得一搜索堆栈溢出一些discussion on its usage。
希望这可以帮助 :)