如何在嵌套调用eval()时使用单引号?

时间:2019-02-09 14:24:39

标签: php eval

我正在尝试将单引号与嵌套调用eval()一起使用:

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

但是,这会触发以下错误:

  

语法错误,意外的“ hi”(T_STRING)

如何使用单引号并解决此错误?

1 个答案:

答案 0 :(得分:1)

您在转义单引号时遇到问题。您可以使用双引号代替-"hi"代替'hi'

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

如果需要使用单引号,则需要对转义单引号的反斜杠本身进行转义,并加上一对额外的反斜杠(\\);即:

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

这将产生:

  

您可以想象,随着嵌套级别的增加,这将很快变得混乱。

值得注意的是,eval()被认为是危险的,只应在非常仔细的情况下使用它,您已经彻底评估了使用它的风险,并且没有更好的方法来实现目标您正在尝试做。

PHP documentation中所述:

  

警告 eval()语言构造非常危险,因为它允许执行任意PHP代码。因此不鼓励使用它。如果您已经仔细验证了除了使用此构造方法外没有其他选择,请特别注意不要在未经事先正确验证的情况下将任何用户提供的数据传递到其中。

值得在Stack Overflow中搜索一些discussion on its usage

希望这会有所帮助:)