¿Por qué la deserialización en PHP sigue siendo falsa?

Acabo de escribir el guión más fácil del mundo, pero aún así no puedo hacer que funcione, y es muy extraño.

Quiero usar jQuery para capturar algunos valores de campo de entrada y serializarlos con serialize() jQuery. Luego envío la cadena serializada al servidor para deserializarla. Aquí está la salida que obtengo de la serialización en jQuery, esto es lo que envío al servidor.

 field1=value1&field2=value2&field3=value3 

Y aquí está la función,

 public function unserialize_input() { $str = $this->input->post("user_values"); $unserialized = unserialize($str); var_dump($unserialized); } 

Como dije, si voy “echo $ str”; Obtengo “field1 = value1 & field2 = value2 & field3 = value3”, por lo que la cadena debe ser deserializable. Sin embargo, siempre recibo el mismo mensaje de error y el var_dump($unserialized); siempre devuelve bool (falso).

Aquí está el mensaje de error que recibo de CodeIgniter , el marco que estoy usando para PHP.

 Severity: Notice Message: unserialize() [function.unserialize]: Error at offset 0 of 41 bytes bool(false) 

Estoy usando MAMP y ejecuto esto localmente en este momento. Leí algo sobre que magic_quotes_gpc está en OFF podría causar esto localmente, pero está habilitado. ¿Qué podría estar mal?

Estás usando la función PHP incorrecta. Deberías usar parse_str en parse_str lugar.

  parse_str($str, $unserialized); 

Serialize y unserialize de PHP destruye y construye objetos / matrices / valores PHP.

jQuery serialize serializa un formulario en una cadena POST que puede ser muy útil para hacer llamadas Ajax. Una cadena de publicación no es una cadena serializada válida en PHP y no se puede reconstruir a un valor mixto PHP y, por lo tanto, devuelve falso.

Esto va a ser un poco vago porque no sé jQuery demasiado bien, pero ¿podría ser que las cadenas de serialización de jQuery sean ligeramente diferentes de PHP? Si es así, entonces eso causaría el mensaje de error que ves.