如何回显一个变量';It还不是一个变量


How to echo a variable that's not a variable yet

我正在与以下脚本作斗争:

$filename = '../lang.nl.php'; 
$string   = '<?php // language = ' . $filename . '<br>'; 
foreach ($_POST as $param_name => $param_val) {
    $string .= "$lang=['". $param_name ."'] = ". $param_val .";'n"; 
}
$string .= "?>";
file_put_contents($filename, $string); 

正如您所看到的,我想创建一个包含所有$_POST变量的语言文件,但PHP将$string中的$lang视为一个变量。你可以想象这不是我想要的,它应该只打印$lang,而不是$lang作为变量应该是什么。

逃离$:$string .= "'$lang=['". $param_name ."'] = ". $param_val .";'n";

与原始代码不同的是$lang之前的反斜杠,这使$符号成为普通的$符号,而不是变量名的标记。

在这里使用var_export更容易(更安全):

$filename = '../lang.nl.php'; 
$post = var_export($_POST, true);
$code = "<?php // language = $filename;
    '$lang = $post;
?>";
file_put_contents($filename, $code);

如果param_val包含引号,则"$lang=['". $param_name ."'] = ". $param_val;将失败。