2013-04-26 23 views
6

Tôi đang cố gắng vượt qua một mảng máng một trường đầu vào dạng html. Sử dụng serialize để truyền nó và sau đó unserialize để đọc lại mảng. Tôi có nhiều trường nhập.unserialize Lỗi tại offset 5 của 9 byte

$test = array('name' => 'Sander', 'type' => 'melon'); 

echo '<input type="hidden" name="rank[]" value="'.serialize($test).'" >'; 

Sau đó Nếu tôi muốn unserialize nó và hiển thị các dữ liệu mà nó mang lại cho một lỗi:

$list = $_POST['rank']; 
var_dump($list); 
var_dump(unserialize($list[0])); 

enter image description here

+0

thể trùng lặp của [unserialize() \ [function.unserialize \]: Lỗi tại offset] (http://stackoverflow.com/questions/10152904/unserialize-function-unserialize-error-at-offset) – Rikesh

Trả lời

0

Thay vì sử dụng serialize Tôi chỉ sử dụng urlencode() và urldecode().

Đã thay đổi mảng thành định dạng khác.

$info = 'name=Sander&type=melon'; 

echo '<input type="hidden" name="rank[]" value="'.urlencode($info).'" >'; 

Sau đó, tôi chỉ có thể hiển thị các giá trị như thế này:

if(!empty($_POST['rank'])){ 

    $list = $_POST['rank']; 
    $listSize = count($list); 

    for($i=0;$i<$listSize;$i++){ 

     parse_str(urldecode($list[$i]), $output); 
     var_dump($output); 
    } 

} 

Vấn đề được giải quyết :)

6

Bạn rất có thể cần phải vượt qua chuỗi tuần tự qua urlencode() trước khi xuất.

Để xử lý, hãy sử dụng urldecode() trước unserialize().

0

Điều này là do khi bạn thêm dữ liệu tuần tự trong đầu vào html, nó tạo ra bị thay đổi html tag

<input type="hidden" name="rank[]" value="a:2:{s:4:"name";s:6:"Sander";s:4:"type";s:5:"melon";}" > 

thấy "vị trí. Do đó dữ liệu bài viết của bạn là không đầy đủ

var_dump($_POST['rank']); 

sản xuất

array(1) { 
    [0]=> 
    string(9) "a:2:{s:4:" 
} 

tại sao bạn không thử json_encode và json_decode?

+2

[Cú pháp JSON] (http://www.w3schools.com/json/json_syntax.asp) sử dụng dấu ngoặc kép cũng như cho chuỗi, bạn phải có 'urlencode()' để ngăn chặn t anh ta cũng hành xử trong trường hợp này. – hexblot

1

thử

$list = urldecode($_GET['rank']); 
//var_dump($list); 
var_dump(unserialize($list)); 
$test = array('name' => 'Sander', 'type' => 'melon');?> 
<form > 
<input type='hidden' name='rank' value='<?php echo serialize($test);?>' > 
<input type="submit" > 
</form> 
+0

Thay vì mảng, tôi đã tạo một chuỗi theo dạng sau: "name = Sander & type = melon". Điều này đã làm việc! – Sharpless512

Các vấn đề liên quan