如何执行在php中的字符串中找到的代码

时间:2018-11-09 18:15:35

标签: php parsing string-parsing

嘿, 我想运行在

下的字符串中找到的代码
$str=" $row["AccountID"].$row["CurrencyID"] "; 

像这样:

while($row = $result2->fetch_assoc()) {
     echo $str;
}

,但输出显示如下:

 $row["AccountID"].$row["CurrencyID"] 

那不是我所需要的, 我怎样才能让它在字符串中运行代码,并允许它以变量形式而不是字符串形式读取“ $ row”字?

3 个答案:

答案 0 :(得分:0)

出于充分的理由,像PHP这样的编程语言将不对字符串求值。如果PHP试图评估它在字符串中找到的所有内容,那么您的应用程序中将存在巨大的安全漏洞。

$str = "$row";起作用的原因是因为PHP甚至在分配字符串之前就评估"$row"。变量$row不在$str中,该值存在。

一个常见的用例是存储模板语法并替换视图中的占位符。可能的占位符为%AccountID%{{AccountID}}。无论您喜欢什么,然后在循环内的$row值的占位符上使用字符串替换:

$template = "The account ID is %AccountID%.";

...

while($row = $result2->fetch_assoc()) {
     echo str_replace('%AccountID%', $row['AccountID'], $template);
}

我敦促您不要在这里使用eval(),因为如果您无法完全控制输入内容,那么就很容易遭受危险的注射。

答案 1 :(得分:0)

这是一种方法:

sprintf('%d%d', $row["AccountID"], $row["CurrencyID"]);

%d是整数格式

答案 2 :(得分:0)

您可以使用这种爆破/爆炸方法在字符串中查找和替换值。

$str = '$row["AccountID"].$row["CurrencyID"]'; 

//first remove the '.'
$str = implode('', explode('.', $str));

while($row = $result2->fetch_assoc()) {
  $row_str = $str;
  foreach($row as $field=>$value){
     $row_str = implode($value, explode('$row["'.$field.'"]', $row_str ));
  }
  echo $row_str;
}