用户需要能够输入PHP参数数组。
目前,他们看到一个文本区域,他们希望输入定义数组的PHP代码:
<textarea name="foo">
$bar = array( 'key' => 'value' );
</textarea>
我得到文本区域的值,例如字符串$ _GET ['foo']。
我如何解析这个以便我可以使用数组$ bar?如果我能帮助它,我宁愿不使用eval。
谢谢!
答案 0 :(得分:0)
我不确定您是否不想使用eval
,因为它完全是出于您描述的目的。但是,由于评估用户输入是如此危险,这就是为什么你试图避免它?如果是这样,您唯一的选择可能是解析$_GET['foo']
的值,删除所有危险或不需要的代码,然后eval
。
[修改] - 新答案
现在我考虑一下,如果您需要一个简单的解决方案供用户输入基于数组的数据,请查看parse_ini_string
- http://us3.php.net/parse_ini_string。它将采用以下格式的字符串并为您提供关联数组。如果需要,您甚至可以使用多维数组。
one = 1
five = 5
animal = BIRD
phpversion[] = "5.0"
phpversion[] = "5.1"
phpversion[] = "5.2"
phpversion[] = "5.3"
答案 1 :(得分:0)
答案 2 :(得分:0)
if(is_set($_GET['foo'])) // we have something
{
// do your security testing and ad it to var $foos
// now proceed
foreach($foos as $foo)
{
echo $foo;
}
}
答案 3 :(得分:0)
如果您不想使用eval()
,则使用parse_str()
是最佳选择:
$str = 'first=value&arr[]=foo+bar&arr[]=baz';
parse_str($str, $arr);
echo $arr['first']; // value
echo $arr['arr'][0]; // foo bar
echo $arr['arr'][2]; // baz
tokenizer函数也可能是一个选项,但它会更复杂。
答案 4 :(得分:0)
如果你绝对必须让用户以这种方式定义数组,那么让他们将它定义为json会更好。它很容易转换,你不必像PHP代码那样lex它;比eval安全得多。另外,json是一种轻量级且易于定义数组的方法,因此它也将为用户提供更好的用户体验:)