Ich dachte, ich würde mir das Leben leichter machen und zukunftsbewusst sein, indem ich einige Inhalte als JSON-Teile in benutzerdefinierten post_meta-Feldern speichere. Leider stimmt WordPress nicht zu und macht mein Leben unglaublich schwierig.
Ich habe eine JSON-Zeichenfolge, die im Wesentlichen so aussieht. Dies ist nur ein Bit, und die Kommentarzeichenfolge besteht nur aus einigen Dummy-Unicode-Entitäten. Das Ganze wird mit json_encode generiert .
{
"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"
}
}
Nachdem ich es mit update_post_meta
gespeichert habe, sieht es leider so aus:
{
"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"
}
}
Und wenn die Schrägstriche entfernt sind, kann es nicht json_decode
wieder in nützliche Inhalte umgewandelt werden.
Irgendwelche Ideen, warum WordPress dies tun könnte und ob es einen Weg gibt, dies zu vermeiden? Ich kann das JSON_UNESCAPED_UNICODE-Flag nicht verwenden, da dies eine PHP 5.3.x-Installation ist und ich bereits versucht habe, mit zu codieren, htmlentities
bevor der Inhalt an übergeben wird json_encode
, aber dies erfasst nur eine kleine Teilmenge von UTF-8-Entitäten.
Danke im Voraus!
(EDIT: FWIW, ich weiß, ich könnte ein Array einfach direkt in post_meta speichern und es würde serialisiert und Magie würde passieren, aber ich mag nur die Idee, die Daten als JSON zu speichern. Wenn es keine einfache, elegante Lösung gibt ich werde Höhle, aber ich bin sehr viel Hoffnung , es ist eine einfache, elegante Lösung!)
Es gibt eine elegante Möglichkeit, damit umzugehen!
Führen Sie die JSON-codierte Zeichenfolge durch
wp_slash()
. Diese Funktion entgeht dem führenden Schrägstrich jedes codierten Unicode-Zeichens, wodurch verhindert wird, dassupdate_metadata()
sie entfernt werden.quelle
Sie können WordPress mit so etwas betrügen:
Dies ist diese einfache * elegante Lösung * ...
quelle
Diese Funktion führt die Transformation mit preg_replace durch:
Vor jeder "uXXXX" -Sequenz (X = 0..F, hexadezimal) wird ein Backslash hinzugefügt. Rufen Sie diese Funktion auf, bevor Sie sie an DB senden.
quelle
Ein interessanter Weg, dies zu umgehen, ist die Codierung in base64 (siehe Beispiel unten).
quelle
Für alle, die immer noch Probleme haben , eine json-codierte Unicode-Zeichenfolge über wp_update_post zu speichern , hat das Folgende für mich funktioniert. Gefunden in class-wp-rest-posts-controller.php
Hier ist ein Beispiel:
quelle
Sie können die WordPress-Funktion stripslashes_deep () verwenden.
Als Referenz besuchen Sie hier
quelle
BARBJANE's
wird immer noch von WordPress gesendet, alsBARBJANE\'s