2013-04-26 4 views
6

Sto provando a passare un array attraverso un campo di input in formato html. Utilizzare serialize per passarlo e quindi unserialize per leggere di nuovo l'array. Ho più campi di input.unserialize Errore all'offset 5 di 9 byte

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

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

Poi se voglio unserialize e mostrare i dati dà un errore:

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

enter image description here

+0

possibile duplicato del [unserialize() \ [function.unserialize \]: errore a offset] (http://stackoverflow.com/questions/10152904/unserialize-function-unserialize-error-at-offset) – Rikesh

risposta

0

Invece di usare serializzare sto solo usando UrlEncode() e urldecode().

Modificato l'array in un formato diverso.

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

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

Poi posso semplicemente visualizzare i valori in questo modo:

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); 
    } 

} 

problema è risolto :)

6

Molto probabilmente bisogno di passare la stringa serializzata attraverso urlencode() prima dell'emissione.

Per elaborarlo, utilizzare urldecode() prima del unserialize().

0

Questo perché quando si aggiungono i dati serializzati in input HTML, produce tag HTML malformato

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

vedere la "posizionamenti. A causa di questo i dati post è incompleta

var_dump($_POST['rank']); 

produce

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

perché non provi json_encode e json_decode?

+2

[sintassi JSON] (http://www.w3schools.com/json/json_syntax.asp) usa le virgolette doppie anche per le stringhe, dovresti 'urlencode()' per prevenire t lui comportamento anche in questo caso. – hexblot

1

provare

$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

Invece di array, ho creato una stringa nel seguente formato: "name = Sander & type = melon". Questo ha funzionato! – Sharpless512