免责声明
我写了这个函数(出于乐趣:),因为我很懒,所以我想要一种将字符串中的数组转换为有效 PHP 数组的简单方法。 我不确定这段代码在生产环境中是否 100% 安全使用exec,它的姐妹们总是把我吓坏了。
$myArray = 'array("key1"=>"value1", "key2"=>"value2")';
function str_array_to_php(string $str_array) {
// No new line characters and no single quotes are allowed
$valid_str = str_replace(['\n', '\''], ['', '"'], $str_array);
exec("php -r '
if (is_array($valid_str)) {
function stap(\$arr = $valid_str) {
foreach(\$arr as \$v) {
if(is_array(\$v)){
stap(\$v);
}
else {
echo \$v,PHP_EOL;
}
}
}
stap();
}'2>&1", $out);
return $out;
}
print_r(str_array_to_php($myArray));
输出:
Array ( [0] => value1 [1] => value2 )
如您所见,它将$myArray 转换为有效的PHP 数组,然后对其进行数字索引,如果它是多维的,则将其转换为单个数组。
小心:
1- 永远不要在双引号中传递数组,因为这将允许计算空字节字符 (\0)。
例如:
$myArray = "array(\"key1\"=>\"value\n\0 ggg\", \"key2\"=>\"value2\")"
//Output: Warning: exec(): NULL byte detected. Possible attack
2- 如果exec 被禁用,此功能将不起作用(大多数情况下)
3- 如果未设置php 命令,此功能将不起作用
最后一件事,如果您发现任何错误或缺陷,请在 cmets 中告诉我,以便我修复和学习。
希望这会有所帮助。