
PHP unserialize: decodificar opciones WordPress y datos serializados
Deserializa `wp_postmeta` de WordPress, sesiones PHP y caches Laravel a JSON legible en el navegador — solo arrays y escalares, sin script local.
Decodificar PHP serializado en lugar de leer tokens en bruto
Un option_value de WordPress, un wp_postmeta.meta_value, un blob de sesión PHP o un volcado de caché de Laravel suele llegar al editor como a:3:{s:8:"blogname";…}. Esa cadena es la salida de serialize() de PHP. No es JSON ni un bundle minificado. El deserializador PHP en línea convierte los tokens de arrays y escalares en JSON legible (o en sintaxis de array PHP), dentro del navegador. No ejecuta PHP, no instancia objetos de clase y no sube el payload. Este artículo explica cómo depurar: dónde viven esos blobs, cómo pegarlos con seguridad y cuándo sigue haciendo falta PHP nativo. Para el formato de serialización, la comparación con JSON y la inyección de objetos, empieza por la guía de serialización PHP. Los recursos front del mismo sitio WordPress son otro trabajo, que cubre la minificación WordPress.
Serialize y unserialize, dos herramientas para un mismo volcado de WordPress
PHP serialize() emite una cadena con tipos. unserialize() reconstruye el valor. FastMinify replica esa división: php-serialize codifica JSON o sintaxis de array PHP en tokens a:/s:/i:; php-unserialize los decodifica. No pegues un blob serializado en el serializador, ni JSON en el deserializador. Las utilidades vecinas están en el hub de utilidades para desarrolladores.
a:…, s:…, i:…, d:…, b:…, N;array(…) / => (ver PHP serialize en línea)El core y muchos plugins llaman a maybe_serialize() / maybe_unserialize(). Si el valor es un array PHP (o un objeto), se guarda en MySQL como una cadena serialize(). Los escalares (cadenas, números) se quedan como están, así que no todas las filas empiezan por a:.
wp_options.option_value: nombre del sitio, permalinks, instancias de widgets, ajustes de pluginswp_postmeta.meta_value: tamaños de adjuntos, campos personalizados, constructores de páginaswp_usermeta / wp_commentmeta: el mismo patrón, por usuario o comentario_transient_*) suelen contener un array, y la fecha de caducidad está en una opción aparteO: seguido de un nombre de clase, FastMinify la rechaza: es un objeto de plugin, no un arrayEn PHP, unserialize() sobre una entrada no fiable puede instanciar objetos y activar cadenas de gadgets (inyección de objetos). FastMinify lee el formato en JavaScript. Nunca ejecuta PHP y no decodifica ni los objetos de clase O: ni las referencias R:. Es un límite y a la vez una garantía de seguridad. Úsalo para inspeccionar volcados de arrays. Que el decode funcione no significa que el payload sea seguro para pasarlo a unserialize en producción.
unserialize($s, ['allowed_classes' => false]) (PHP 7+)eval ni con wp-cli eval un blob copiado de un ticketQué acepta el parser y cómo se ve una fila de WordPress
Cada token empieza por una letra. El deserializador de FastMinify acepta el mismo subconjunto que puede serializar: null, bool, int, float, cadena, array anidado. Objetos y referencias son errores, no omisiones silenciosas.
Antes
Después
a:N:{…}: array con N pares clave/valor (asociativo o indexado)s:n:"…" es una cadena, y su número indica la longitud en bytes, no la de caracteres UTF-8i: entero, d: float, b:0/b:1 bool, N; nullO:8:"stdClass" y R: / r: no se decodifican aquís:3:"hello", sin el punto y coma final, falla en lugar de corromper el resto del array. La herramienta no compara el número con la longitud del texto, así que compruébalo en PHP cuando importeLos metadatos de adjuntos y algunos campos personalizados (los campos de relación o de casillas de ACF, por ejemplo) son arrays de enteros y cadenas. Es justo el subconjunto que maneja este parser. Pega la celda, pulsa Deserializar y copia el JSON.
Antes
Después
wp option get … --format=json ya deserializa en PHP, así que usa FastMinify cuando solo tengas el dump SQLLos archivos de sesión de PHP y algunos controladores de caché de Laravel guardan payloads serialize(). Si el valor es un array de escalares, la herramienta funciona en el navegador. Si es un modelo Eloquent, una instancia de Carbon o cualquier clase O:, FastMinify devuelve un error claro. Es lo esperado: la herramienta no finge ser el unserialize de PHP.
Cache::put de Laravel con un array plano suele dar a:, así que pega y decodificaO:: decodifícalos en PHP con una allowlist, no aquíencrypt() no son serialize(): descífralos antes en la aplicaciónO:, no R:, no ejecución de objetosDeserializar en el navegador con un ejemplo concreto de WordPress
Abre el deserializador PHP, pega una sola cadena serializada y pulsa Deserializar. La salida es JSON por defecto (sangría de 2 espacios). Cambia a la sintaxis de array PHP si vas a pegar el resultado en un fragmento de código. Todo se queda en la pestaña, sin cuenta y sin viaje al servidor.
Un widget de la barra lateral se muestra vacío tras una migración. La opción widget_* es un array serializado. Necesitas ver qué claves sobrevivieron, no adivinar desde una celda de 400 caracteres.
1. Copiar el option_value en bruto
Desde SQL o WP-CLI, copia la cadena completa a partir de a:. Las vistas previas recortadas con … no se podrán analizar.
2. Pegar en php-unserialize
Abre php-unserialize y deja la salida en JSON. Si ves un error de formato desconocido en O:, el widget guardó un objeto. Detente aquí y usa PHP con allowed_classes.
3. Editar el JSON y volver a serializar solo si debes escribir de vuelta
Corrige las claves en el JSON y vuelve a codificarlo con php-serialize. Esta ida y vuelta vale para los arrays y escalares que admite este parser. El resultado no coincide byte a byte con la cadena original de WordPress (orden de las claves, espacios). Prefiere WP-CLI wp option update con JSON cuando puedas.
Redis muestra un valor que empieza por a:. Quieres saber qué claves de configuración hay en el payload antes de borrar la clave.
1. Copiar el valor como texto sin formato
redis-cli escapa las comillas dentro de un valor salvo en modo raw, así que copia el valor como texto sin formato. Si hay algo antes del primer a: o s: (el controlador de caché de archivos de Laravel escribe primero una marca de caducidad), quítalo.
2. Decodificar en local
Pega el valor en el deserializador. Los arrays anidados se convierten en objetos o arrays JSON. Los nulls se conservan si la opción «Incluir valores null» está activa (valor por defecto).
3. Dejar a PHP los payloads de objetos
Un token de clase Illuminate\… dará error. Es la herramienta comportándose como se documenta, no un volcado de Redis roto.
Cuándo sigues necesitando PHP (y cómo hacer la ida y vuelta de arrays)
Si el blob contiene objetos, o estás en un script de despliegue, decodifica en PHP sin instanciar clases. Los objetos de clase incompleta te dan el nombre de la clase sin ejecutar constructores. FastMinify no sustituye esta protección.
Ejemplo básico
El core de WordPress ya conoce el formato. maybe_unserialize() devuelve arrays, y WP-CLI imprime JSON, así que nunca editas a mano los prefijos de longitud. Usa FastMinify cuando solo tengas una exportación SQL o un texto pegado de un ticket. Después escribe de vuelta por las API de WordPress, no con un UPDATE directo sobre una cadena serialize() retocada.
Ejemplo básico
Decodifica con php-unserialize, edita el JSON y codifica con php-serialize. Los objetos JSON anidados se convierten en arrays PHP, no en objetos O:. Ordenar claves o quitar nulls y estructuras vacías cambia lo que escribes de vuelta. La documentación de la herramienta lo dice claro: no es una utilidad de migración SQL de WordPress exacta al byte. Para el CSS y el JS del mismo sitio, usa la guía de minificación WordPress, que es otro proceso.
Ejemplo básico
Conclusión
Pega la cadena serialize(), lee el JSON y decide si el payload es un array que puedes convertir de ida y vuelta o un objeto que corresponde a PHP. FastMinify hace esa inspección en local y rechaza O:/R:. No es unserialize(), ni WP-CLI, ni una forma segura de buscar y reemplazar en volcados de MySQL. Para el detalle del formato, ten a mano la guía de serialización PHP.
Decodifica ahora un blob de WordPress o de sesión
Artículos relacionados

HTTP/2 y HTTP/3 cambian el trayecto de los archivos, no su peso. Mediciones de tamaño, compilación y bundling muestran lo que la minificación aún aporta.

Convierte un epoch Unix en una fecha legible y al revés, distingue segundos de milisegundos y evita las trampas de zona horaria, JWT y cambio de hora.

Lee una expresión cron campo a campo, comprueba sus próximas ejecuciones en UTC o en hora local y evita las trampas de pasos, zonas horarias y dialectos.