作为array_import/var_import用于排序导出数组的内容是什么?
问题描述:
我有一个字符串。这是用户提交的字符串。 (你永远不应该信任用户提交任何东西。)作为array_import/var_import用于排序导出数组的内容是什么?
如果字符串中存在某些(不是不安全的)字符,它应该成为一个多维数组/树。首先我尝试了分割,正则表达式和循环。太难了。我找到了一个非常简单的解决方案,其中包含几个简单的str_replace
,结果是字符串看起来像一个数组定义。例如:
array('body', array('div', array('x'), array(), array('')), array(array('oele')))
这是一个愚蠢的数组,但它很容易创建。现在该字符串必须成为该数组。我正在使用eval()
,我不喜欢它。由于它是用户提交的(并且必须能够包含任何东西),因此可以在该字符串中进行任何类型的函数调用。
因此百万美元的问题:是否有某种var_import
,或array_import
从字符串创建一个数组,并没有别的(如神秘,危险调用exec
等)?
是的,我已经尝试过php.net,并没有上述_import
功能存在。
我在找的是与var_import
完全相反的,因为我有字符串作为输入,看起来完全像字符串var_export
会输出。
任何其他建议,使其更安全,然后eval
也欢迎!但我并没有放弃目前的方法(这太简单了)。
答
使用
array('body', array('div', array('x'), array(), array('')), array(array('oele')))
作为输入,我更换了一些字符,使之成为有效的JSON字符串,并导入了通过json_decode
。
完美地工作。如果存在一些非法字符,json_decode
将跳过它们(并且不执行任何危险代码)。
用户输入字符串如何拆分/数组树结构决定什么? – 2011-05-03 15:48:22
解析一个php数组是不可能的。我将使用JSON格式将数组定义为字符串:'[“body”,[“div”,[“x”],[],[“”]],[[“oele”]]]''。然后你可以做[json_decode](http://www.php.net/manual/en/function.json-decode.php)。 – meze 2011-05-03 15:50:21
我不决定用户提交的字符串是什么样子。其格式已经确定。我能做的最好的就是上面的“数组作为字符串”。 @meze也许我可以将php-array-string转换为json-string,然后使用json_decode ..? – Rudie 2011-05-03 15:54:32