我需要用户在textarea中输入一个数组,这个数组可能是大数组,我试图将其序列化并将其保存在DB中但是它失败了,
这是我的代码:
if( strpos( $_POST['textarea_array'], 'array' ) !== FALSE ) {
$temp_serialized = serialize( $_POST['textarea_array'] );
if( ( $temp_unserialized = @unserialize( $temp_serialized ) !== FALSE )
&& is_array( $temp_unserialized ) ) {
/* Condition FAILED */
$temp_json = json_encode( $temp_unserialized );
$final_value = base64_encode( $temp_json );
}
}
在textarea中输入一个简单或复杂数组的示例,其中包含每个键的子数组
array(
'x_sub_array' => array(
'x_1' => 'X 1',
'x_2' => 'X 2',
'x_3' => 'X 3',
);
'x_2' => 'X 2',
'x_3' => 'X 3',
);
答案 0 :(得分:1)
首先,有更简单的方法来传递数据。但如果这是绝对唯一的方式,不妨直截了当地回答。 (如果您的用户严格遵守格式......)
if(isset($_POST['textarea_array'])){
$raw = $_POST['textarea_array'];
//Parse the array section
$start = strpos($raw, "(");
$end = strpos($raw, ")");
$full = substr($raw,$start+1,$end - ($start+1));
//Remove quotations
$full = str_replace("'","",$full);
//Divide string into array of segments `key=>value` as one segment
$segments = explode(",", $full);
foreach($segments as $segment){
//Divide each segment `key=>value` to a temp array
//Index 0 will hold the key, Index 1 will hold value
$array_part = explode("=>",$segment);
//Remove spaces
$key = trim($array_part[0]);
$value = trim($array_part[1]);
//insert into associative array
$final[$key] = $value;
}
//$final now has your associative array
echo json_encode($final);
}
同样,还有更好的选择。
- 如何让用户通过AJAX传递json对象?
- 或者用户如何输入每个元素并用换行符分隔?
但从不依赖序列化或eval,尤其是因为您不希望用户访问您的php页面。