Pensé que me estaba haciendo la vida más fácil y estaba consciente del futuro al guardar algunos contenidos como bits de JSON en campos personalizados post_meta. Desafortunadamente, WordPress no está de acuerdo y está haciendo mi vida increíblemente difícil.
Tengo una cadena JSON que se ve esencialmente así. Esto es solo un bit, y la cadena de comentarios son solo algunas entidades unicode ficticias. Todo se genera con json_encode .
{
"0": {
"name": "Chris",
"url": "testdomain.com",
"comment": "\u00a5 \u00b7 \u00a3 \u00b7 \u20ac \u00b7 \u00b7 \u00a2 \u00b7 \u20a1 \u00b7 \u20a2 \u00b7 \u20a3 \u00b7 \u20a4 \u00b7 \u20a5 \u00b7 \u20a6 \u00b7 \u20a7 \u00b7 \u20a8 \u00b7 \u20a9 \u00b7 \u20aa \u00b7 \u20ab \u00b7 \u20ad \u00b7 \u20ae \u00b7 \u20af \u00b7 \u20b9"
}
}
Desafortunadamente, después de guardarlo update_post_meta
, sale así:
{
"0": {
"name": "Chris",
"url": "testdomain.com",
"comment": "u00a5 u00b7 u00a3 u00b7 u20ac u00b7 u00b7 u00a2 u00b7 u20a1 u00b7 u20a2 u00b7 u20a3 u00b7 u20a4 u00b7 u20a5 u00b7 u20a6 u00b7 u20a7 u00b7 u20a8 u00b7 u20a9 u00b7 u20aa u00b7 u20ab u00b7 u20ad u00b7 u20ae u00b7 u20af u00b7 u20b9"
}
}
Y con las barras eliminadas, no se puede json_decode
volver a contenido útil.
¿Alguna idea de por qué WordPress podría estar haciendo esto, y si hay una manera de evitarlo? No puedo usar el indicador JSON_UNESCAPED_UNICODE porque es una instalación de PHP 5.3.x, y ya he intentado codificar htmlentities
antes de pasar el contenido json_encode
, pero eso solo captura un pequeño subconjunto de entidades UTF-8.
¡Gracias por adelantado!
(EDITAR: FWIW, sé que podría guardar una matriz directamente en post_meta y se serializaría y ocurriría magia, pero me gusta la idea de tener los datos almacenados como JSON. Si no hay una solución fácil y elegante voy a la cueva, pero estoy mucho esperando que hay es una solución fácil, elegante!)