我有这样的功能:
function array2string($data) {
if($data == '') return '';
return addslashes(var_export($data, TRUE));
}
我调用此函数将$ _REQUEST Array转换为String,就像
一样array2string($_REQUEST)
并将结果String转换为Array使用此函数:
function string2array($data) {
// print_r($data);
$data=str_replace('\'',"'",$data);
// $data=str_replace(''',"'",$data); // add by futan 2015-04-28
$data=str_replace("\'","'",$data);
// print_r($data);exit();
if($data == "") return array();
@eval("\$array = $data;");
return $array;
}
一般情况下,它可以工作,有时可能会起作用,但它不起作用 结果是这样的:
array ( \'name\' => \'xxx
我找不到任何问题,因为我不能再发生错误。 有人可以帮帮我??
答案 0 :(得分:3)
您应该使用PHP本机serialize() / unserialize()来实现此目的,而不是创建自己的自定义函数来获取数组/对象的字符串表示形式:
// Serialize the array data. This string can be used to store it in the db
$serialised_string = serialize($_REQUEST);
// Get the array data back from the serialized string
$array_data = unserialize($serialised_string);
此外,您可能会在自定义函数eval()
中string2array()
使用时遇到PHP注入问题。
答案 1 :(得分:0)
除了serialize
之外的另一个选择是使用json_encode
:
$array = ['foo' => 'bar'];
$string = json_encode($array); // $string now has {'foo': 'bar'}
// Restore array from string.
// Second parameter is passed to make sure it's array and not stdClass
$array = json_decode($string, true);
除非你绝对需要,否则不要发明你的功能。如果您认为有,请添加说明,原因,以便我们提供帮助。