Я думал, что облегчаю свою жизнь и ориентируюсь в будущее, сохраняя некоторый контент в виде битов JSON в пользовательских полях post_meta. К сожалению, WordPress не согласен и делает мою жизнь невероятно сложной.
У меня есть строка JSON, которая выглядит по существу так. Это всего лишь один бит, а строка комментария - это просто фиктивные юникодные объекты. Все это создается с помощью 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"
}
}
К сожалению, после того, как я сохранил его update_post_meta
, он выглядит примерно так:
{
"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"
}
}
И с удаленными слешами, это не может быть json_decode
возвращено в полезный контент.
Любые идеи, почему WordPress может делать это, и есть ли способ избежать этого? Я не могу использовать флаг JSON_UNESCAPED_UNICODE, потому что это установка PHP 5.3.x, и я уже пробовал кодировать с помощью htmlentities
до передачи содержимого json_encode
, но это захватывает только небольшое подмножество объектов UTF-8.
Заранее спасибо!
(РЕДАКТИРОВАТЬ: FWIW, я знаю, что я мог бы просто сохранить массив непосредственно в post_meta, и он был бы сериализован, и волшебство произошло бы, но мне просто нравится идея хранить данные в виде JSON. Если нет простого, элегантного решения Я буду пещерой, но я очень надеюсь , есть это простое, элегантное решение!)