Inicio › Herramientas para desarrolladores › PHP unserialize online

PHP unserialize online

Pega una cadena generada por serialize() de PHP, como una opción de WordPress, una sesión o un valor de caché, y léela como JSON, un árbol desplegable o la salida de print_r() o var_export(). Las longitudes de cadena rotas tras un buscar y reemplazar en la base de datos se reparan automáticamente, y una segunda pestaña convierte JSON de vuelta al formato serializado de PHP.

Última actualización:

Resultado

La decodificación se hace en tu navegador con un analizador seguro: no se ejecuta código PHP, no se crean objetos y no se sube nada.

Publicidad
Publicidad

Cómo usar PHP unserialize online

  1. Pega la cadena serializada en el cuadro de la izquierda o abre un archivo de texto. Para empezar se carga una opción de ejemplo al estilo de WordPress.
  2. Elige una vista: JSON, Árbol, print_r() o var_export(). Con Actualización en vivo activada, el resultado se actualiza mientras escribes.
  3. Repara datos rotos: deja activado Reparar longitudes de cadena incorrectas y pulsa Copiar cadena reparada para obtener un valor válido que volver a guardar.
  4. Copia o descarga el resultado decodificado.
  5. ¿Quieres hacer lo contrario? Abre la pestaña Serializar, pega JSON y copia la cadena serializada de PHP.

Referencia del formato PHP serialize()

Cada valor empieza con un marcador de tipo de una letra. Las longitudes y recuentos se escriben antes de los datos, y las longitudes de cadena se miden en bytes.

MarcadorTipo PHPEjemploSignificado
NnullN;Valor NULL
bboolb:1;true (1) o false (0)
iinti:-42;Entero
dfloatd:0.1; d:INF;Coma flotante, también INF, -INF y NAN
sstrings:5:"Café";Longitud en bytes y luego los bytes sin procesar entre comillas
aarraya:2:{i:0;s:1:"x";s:1:"k";b:1;}Número de elementos y luego pares clave/valor
OobjectO:8:"stdClass":1:{s:2:"id";i:7;}Longitud del nombre de clase, nombre de clase, número de propiedades, propiedades
CObjeto SerializableC:3:"Foo":4:{data}Contenido personalizado de una clase que implementa Serializable
Eenum (PHP 8.1+)E:11:"Suit:Hearts";Clase del enum y nombre del caso
r / RreferenciaR:2;Apunta al n-ésimo valor escrito (empezando en 1)

Las propiedades private se guardan como \0ClassName\0prop y las protected como \0*\0prop, donde \0 es un byte NUL. Por eso la longitud declarada del nombre de una propiedad private es mayor que el nombre visible, y por eso copiar estos datos con editores que eliminan los bytes NUL los rompe.

Reparar datos serializados rotos

  • Daños por buscar y reemplazar: reemplazar http://old.test por https://www.new-site.com directamente en SQL cambia la cadena pero no su prefijo s:N:, así que unserialize() de PHP devuelve false. Pega aquí el valor, deja activada la opción de reparación y copia la cadena reparada. Para bases de datos completas, usa una herramienta de buscar y reemplazar compatible con la serialización en lugar de SQL simple.
  • Cambios de codificación: convertir una tabla de Latin-1 a UTF-8 cambia el número de bytes de las letras con tilde; la reparación los recalcula en UTF-8.
  • Comillas escapadas: los datos copiados del código fuente PHP o de un volcado SQL pueden contener \" en lugar de ". Quita el escape primero (por ejemplo, con buscar y reemplazar) antes de decodificar.
  • Prefiere JSON para código nuevo: json_encode() es portable, legible en cualquier lenguaje y seguro de decodificar. Usa serialize() solo para datos que ya lo utilizan.

Preguntas frecuentes

¿Qué hace PHP unserialize?

unserialize() convierte el texto generado por serialize() de nuevo en un valor de PHP. El formato guarda el tipo y el tamaño de cada valor; por ejemplo, s:5:"hello"; es una cadena de 5 bytes y a:2:{...} es un array con dos elementos. Esta herramienta lee el mismo formato y lo muestra como JSON o árbol sin ejecutar PHP.

¿Por qué mi cadena serializada falla con un error de offset en PHP?

Normalmente porque la longitud en bytes declarada de una cadena ya no coincide con su contenido. Esto ocurre tras un buscar y reemplazar simple en una base de datos (por ejemplo, al cambiar un nombre de dominio en WordPress) o cuando un carácter multibyte se contó como un byte. Deja activado Reparar longitudes de cadena incorrectas y copia la cadena reparada.

¿Las longitudes de cadena se cuentan en caracteres o en bytes?

En bytes de la codificación almacenada, normalmente UTF-8. "Café" es s:5 porque la é ocupa dos bytes, y la mayoría de los emojis ocupan cuatro. La herramienta cuenta bytes UTF-8 en ambas direcciones.

¿Es seguro deserializar datos no confiables?

En PHP, llamar a unserialize() con datos del usuario es arriesgado porque puede crear objetos y activar métodos mágicos como __wakeup o __destruct (inyección de objetos). Esta herramienta nunca ejecuta PHP ni crea objetos, así que inspeccionar datos aquí es seguro. En tu propio código, prefiere json_decode o pasa ['allowed_classes' => false] a unserialize.

¿Cómo se muestran los objetos PHP en JSON?

Las propiedades del objeto se convierten en claves JSON y, con Conservar nombres de clase activado, una clave "__class" contiene el nombre de la clase. Los nombres de propiedades private y protected, que PHP guarda con prefijos ocultos de bytes NUL, se limpian; las vistas Árbol y print_r muestran su visibilidad.

¿Por qué un float se convirtió en entero al serializar JSON?

JSON tiene un único tipo numérico, así que 1.0 y 1 son idénticos tras el análisis. Los números enteros se convierten en enteros de PHP (i:), mientras que los números con parte fraccionaria o exponente se convierten en floats (d:).

¿Qué son r: y R: en los datos serializados?

Son referencias a un valor que apareció antes, contadas desde 1 en el orden en que se escribieron los valores. R: es una referencia de PHP (&$var) y r: es un identificador de objeto repetido. La herramienta las resuelve y marca las circulares como *RECURSION*.

¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?

Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.

Herramientas relacionadas

Ver todas las de Conversores de datos y formatos de archivo →