没有eval的Json_encode用户输入(php代码)?

时间:2014-06-26 01:54:24

标签: php

我想从像

这样的表单输入中返回一个json_encoded字符串
<input name="test" value="array(1,2,3)">

php应该返回:[1,2,3]

我可以通过eval做到:eval("\$str=json_encode($test);");

然后在用户输入上运行eval听起来就像是在寻找麻烦。

还有其他选择吗?

2 个答案:

答案 0 :(得分:0)

这是另一种从字符串运行PHP代码而不使用eval

的方法
function fakeEval($phpCode) {
   $tmpfname = tempnam("/tmp", "fakeEval");
   $handle = fopen($tmpfname, "w+");
   fwrite($handle, "<?php\n" . $phpCode);
   fclose($handle);
   include $tmpfname;
   unlink($tmpfname);
   return get_defined_vars();
}

extract(fakeEval('$test='. $_POST['test'].';'));
$json = json_encode($test);

Source

答案 1 :(得分:0)

将输入创建为PHP要处理的数组要容易得多:

http://www.php.net/manual/en/faq.html.php#faq.html.arrays

HTML

<input name="test[]" value="1" />
<input name="test[]" value="2" />
<input name="test[]" value="3" />

PHP

<?php

$test = $_POST['test'];
$jsonTest = json_encode($test);
// ...