0

我需要一些有关 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' )...) 这就是我想要做的,请在 eval 之后制作包含带引号的 vars 值的最终 if 语句,以便 strlen 实际处理它,

我希望我根据需要说清楚:)

提前致谢

4

2 回答 2

1

a为此,您不需要 eval() (有时将其称为 evil()... 是有原因的)。

试试这样的条件:

if ( (strlen($var) <= 5) && (strlen($var) >= 1) )
于 2012-10-05T10:59:28.607 回答
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时,否则它也会被替换。

编辑根据@Erbureth 的评论
转义了 $var 。addslashes

于 2012-10-05T11:00:46.520 回答