使用字符串作为表达式发送到eval()并用可变值PHP替换子字符串

时间:2012-10-05 10:50:06

标签: php expression eval quotes str-replace

我需要一些PHP基本语法的帮助,

我得到以下字符串:
$str = "return (strlen(replace) <= 5 && strlen(replace) >= 1);";

我得到了一个变量:$var = "VariableValue";

和st_replace函数:str_replace('replace', $var, $str);

我想要做的是实际使用eval,例如:

if(eval($str)){//This should now make the if condition **look like**               
               //if(strlen(*'VariableValue'*)...) 
               //

echo 'Success';

}else{

     echo 'Ask the guys at StackOverFlow :),sure after searching for it';
}

因此,如果您注意到if(strlen('VariableValue')...)这就是我想要做的事情,请在包含vars值的eval之后创建最后的if语句WITH QUOTES so strlen实际上处理它,

我希望我根据需要明确表示:)

提前致谢

2 个答案:

答案 0 :(得分:1)

a你不需要eval()(有理由说它有时被称为evil()......)。

试试这样的条件:

if ( (strlen($var) <= 5) && (strlen($var) >= 1) )

答案 1 :(得分:1)

尝试这样

$str = "return (strlen(##replace##) <= 5 && strlen(##replace##) >= 1);";
$var = 'test';

// you have to assign the str_replace to $str again. And use " around the $var.
$str = str_replace('##replace##', '"' . addslashes($var) . '"', $str);

if (eval($str)) {             
    echo 'Success';
}
else {
    echo 'Ask the guys at StackOverFlow :),sure after searching for it';
}

我添加了## around replace,因为最好总是有一个有点独特的字符串来替换...就像你扩展你的eval'd代码以包含str_replace一样,那么它也会被替换掉否则。

修改
根据@ Erbureth的评论,用addslashes转换$ var。