使用字符串作为表达要被发送到的eval()和更换子串与vriable值PHP(Using a str

2019-10-29 07:01发布

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

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

我有一个变量: $var = "VariableValue";

和st_replace功能: str_replace('replace', $var, $str);

我所试图做的像somehing实际上使用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';
}

所以,如果你注意的是,如果(strlen的(“VariableValue”)...)这就是我想做的事,做最后的if语句含有所以实际上strlen的处理它引述瓦尔值EVAL后,

我希望我清楚需要:)

提前致谢

Answer 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';
}

我加了##左右更换,因为它是一个好主意,总是有一个很独特的字符串来代替......就像当你扩大你的eval'd代码,包括str_replace ,那简直太否则更换。

编辑
躲过了$ VAR与addslashes按@ Erbureth的评论。



Answer 2:

a您不必为eval()函数(也有原因,它有时被称为邪恶的()...)。

刚刚尝试这样的条件:

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


文章来源: Using a string as an expression to be send to eval() and replacing a sub-string with a vriable value PHP