数组到字符串函数无法正常工作

时间:2015-06-08 04:22:40

标签: php arrays

我有这样的功能:

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

我找不到任何问题,因为我不能再发生错误。 有人可以帮帮我??

2 个答案:

答案 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); 

除非你绝对需要,否则不要发明你的功能。如果您认为有,请添加说明,原因,以便我们提供帮助。