Saya pikir saya membuat hidup saya mudah dan sadar akan masa depan dengan menyimpan beberapa konten sebagai bit JSON di bidang post_meta khusus. Sayangnya, WordPress tidak setuju dan membuat hidup saya sangat sulit.
Saya memiliki string JSON yang pada dasarnya terlihat seperti ini. Ini hanya satu bit, dan string komentar hanyalah beberapa entitas unicode dummy. Semuanya dibuat w / 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"
}
}
Sayangnya setelah saya simpan update_post_meta
, hasilnya tampak seperti ini:
{
"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"
}
}
Dan dengan garis miring dilepaskan, itu tidak dapat json_decode
d kembali ke konten yang bermanfaat.
Adakah ide mengapa WordPress mungkin melakukan ini, dan jika ada cara untuk menghindarinya? Saya tidak dapat menggunakan flag JSON_UNESCAPED_UNICODE karena ini adalah pemasangan PHP 5.3.x, dan saya sudah mencoba melakukan enkode htmlentities
sebelum konten diteruskan json_encode
, tetapi itu hanya menangkap sebagian kecil entitas UTF-8.
Terima kasih sebelumnya!
(EDIT: FWIW, saya tahu saya bisa menyimpan array langsung ke post_meta dan itu akan diserialkan dan sihir akan terjadi tetapi saya hanya suka gagasan memiliki data yang disimpan sebagai JSON. Jika tidak ada solusi yang mudah dan elegan aku akan gua, tapi aku sangat berharap ada adalah solusi yang mudah, elegan!)
Ada cara yang elegan untuk menangani ini!
Lewati string yang dikodekan JSON
wp_slash()
. Fungsi itu akan lolos dari garis miring utama dari setiap karakter unicode yang disandikan, yang akan mencegahupdate_metadata()
pengupasan mereka.sumber
Anda dapat menyontek ke wordpress dengan sesuatu seperti ini:
Ini adalah yang mudah * solusi elegan * ...
sumber
Fungsi ini melakukan transformasi menggunakan preg_replace:
Sebelum setiap urutan "uXXXX" (X = 0..F, heksadesimal) ia menambahkan garis miring terbalik. Sebelum mengirimkan ke DB, panggil fungsi ini.
sumber
Cara menarik tentang ini adalah untuk menyandikan ke base64 lihat contoh di bawah.
sumber
Bagi siapa pun yang masih berjuang dengan menyimpan string unicode json yang disandikan melalui wp_update_post , berikut ini bekerja untuk saya. Ditemukan di class-wp-rest-posts-controller.php
Ini sebuah contoh:
sumber
Anda dapat menggunakan fungsi WordPress stripslashes_deep ().
Untuk referensi kunjungi di sini
sumber
BARBJANE's
masih dikirim dari WordPress seolahBARBJANE\'s