Je pensais que je rendais ma vie plus facile et que j'étais tourné vers l'avenir en enregistrant du contenu sous forme de morceaux de JSON dans des champs post_meta personnalisés. Malheureusement, WordPress n'est pas d'accord et rend ma vie incroyablement difficile.
J'ai une chaîne JSON qui ressemble essentiellement à ceci. Ce n'est qu'un bit, et la chaîne de commentaire n'est que quelques entités unicode factices. Le tout est généré avec 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"
}
}
Malheureusement, après l'avoir enregistré avec update_post_meta
, il apparaît comme ceci:
{
"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"
}
}
Et avec les barres obliques supprimées, il ne peut pas être json_decode
remis en contenu utile.
Des idées pourquoi WordPress pourrait faire cela, et s'il existe un moyen de l'éviter? Je ne peux pas utiliser l'indicateur JSON_UNESCAPED_UNICODE car il s'agit d'une installation PHP 5.3.x, et j'ai déjà essayé de coder avec htmlentities
avant de transmettre le contenu json_encode
, mais cela ne capture qu'un petit sous-ensemble d'entités UTF-8.
Merci d'avance!
(EDIT: FWIW, je sais que je pourrais simplement enregistrer un tableau directement dans post_meta et il serait sérialisé et la magie se produirait mais j'aime juste l'idée d'avoir les données stockées en JSON. S'il n'y a pas de solution simple et élégante Je vais céder, mais j'espère vraiment qu'il existe une solution simple et élégante!)
Il existe une manière élégante de gérer cela!
Passez la chaîne encodée JSON
wp_slash()
. Cette fonction échappera à la barre oblique principale de chaque caractère unicode codé, ce qui empêcheraupdate_metadata()
de les supprimer.la source
Vous pouvez tricher avec wordpress avec quelque chose comme ceci:
C'est que facile * solution élégante * ...
la source
Cette fonction effectue la transformation en utilisant preg_replace:
Avant chaque séquence "uXXXX" (X = 0..F, hexadécimal), il ajoute une barre oblique inverse. Avant de soumettre à DB, appelez cette fonction.
la source
Un moyen intéressant de contourner cela est de coder en base64, voir l'exemple ci-dessous.
la source
Pour tous ceux qui ont encore du mal à enregistrer une chaîne unicode codée json via wp_update_post , ce qui suit a fonctionné pour moi. Trouvé dans class-wp-rest-posts-controller.php
Voici un exemple:
la source
Vous pouvez utiliser la fonction WordPress stripslashes_deep ().
Pour référence, visitez ici
la source
BARBJANE's
est toujours envoyé depuis WordPress commeBARBJANE\'s
si je manque quelque chose ici ...