Я думал, что облегчаю свою жизнь и ориентируюсь в будущее, сохраняя некоторый контент в виде битов 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. Если нет простого, элегантного решения Я буду пещерой, но я очень надеюсь , есть это простое, элегантное решение!)
Существует элегантный способ справиться с этим!
Передайте строку в кодировке JSON
wp_slash()
. Эта функция будет экранировать начальную косую черту каждого закодированного символа юникода, что предотвратитupdate_metadata()
их удаление.источник
Вы можете обмануть WordPress с чем-то вроде этого:
Это является , что легко * элегантным решением * ...
источник
Эта функция выполняет преобразование с использованием preg_replace:
Перед каждой последовательностью "uXXXX" (X = 0..F, шестнадцатеричный) он добавляет обратную косую черту. Перед отправкой в БД, вызовите эту функцию.
источник
Интересным способом решения этой проблемы является кодирование в base64, см. Пример ниже.
источник
Для тех, кто все еще борется с сохранением строки юникода в кодировке json через wp_update_post , у меня сработало следующее. Найдено в классе-wp-rest-posts-controller.php
Вот пример:
источник
Вы можете использовать функцию WordPress stripslashes_deep ().
Для ознакомления посетите здесь
источник
BARBJANE's
по-прежнему отправляется из WordPress, какBARBJANE\'s
если бы я что-то здесь