Devi inserire un array JSON nel contenuto dei commenti che contiene caratteri speciali?
Vediamo come convertire l’array prima di inserirlo nel database.
Introduzione
Se hai la necessità di inserire una stringa JSON all’interno del contenuto dei commenti, ad esempio in un commento personalizzato, avrai sicuramente notato che, utilizzando la funzione wp_insert_comment(), questa convertirà la stringa e visualizzeremo un stringa errata.
Facciamo un esempio.
Vogliamo inserire un array tipo questo che contiene caratteri accentati in formato JSON:
array('text'=>'perché questo menù, però, non è il massimo.');
Andando ad inserirlo nel database tramite la funzione wp_insert_comment(), visualizzeremo un array come questo
array('text'=>'perchu00e9 questo menu00f9, peru00f2, non u00e8 il massimo');
Perché la stringa viene salvata nel formato errato?
Vediamo il processo insieme.
Prima di inserire l’array nel database lo convertiamo in stringa JSON con la funzione PHP json_encode(), che accetta valori in formato UTF8, e il testo verrà correttamente convertito nel formato utf8
$str = json_encode(array('text'=>'perché questo menù, però, non è il massimo.')); print_r($str); output: [{"text":"perch\u00e9 questo men\u00f9, per\u00f2, non \u00e8 il massimo"}]
Quando passeremo la stringa alla funzione wp_insert_comment(), questa, eliminerà tutti gli slash perché al suo interno utilizza un’altra funzione che serve per pulire il contenuto che gli stiamo passando. La funzione richiamata è
wp_unslash($commentdata)
ed ecco che avremo la stringa errata. Quindi in visualizzazione la stringa non sarà come l’abbiamo scritta noi ma come l’esempio precedente.
Per ovviare a questa cosa possiamo convertire i caratteri accentati, nel loro codice html, prima di effettuare il parse con json_encode(). Quindi faremo:
$text =htmlentities( 'perché questo menù, però, non è il massimo.',ENT_QUOTES,'UTF-8'); $str = json_encode(array('text'=>$text));
A questo punto possiamo passare la stringa $str alla funzione wp_insert_comment() e questa verrà salvata nel seguente formato:
[{"text":"perché questo menù, però, non è il massimo."}]
Ed ecco risolto il problema di salvare stringhe, in formato JSON, contenenti caratteri speciali all’interno dei commenti personalizzati.
Per oggi è tutto. Se hai dei dubbi o riscontri delle problematiche lasciaci un commento che cerchiamo una soluzione rapida…oramai ci abbiamo sbattuto tanto la testa…perché riscoprire l’acqua calda?
DETTAGLI
Livello: medio
Compatibilità: testato su WP versione 3.9.1