web-dev-qa-db-fra.com

codage utf8 dans json rest api

je crée une API personnalisée REST pour obtenir des publications

add_action( 'rest_api_init', 'custom_api_get_all_posts' ); 



function custom_api_get_all_posts() {
    register_rest_route( 'custom/v1', '/all-posts', array(
        'methods' => 'GET',
        'callback' => 'custom_api_get_all_posts_callback'
    ));
}

function custom_api_get_all_posts_callback( $request ) {
    // Initialize the array that will receive the posts' data. 
    $posts_data = array();
    // Receive and set the page parameter from the $request for pagination purposes
    $paged = $request->get_param( 'page' );
    $paged = ( isset( $paged ) || ! ( empty( $paged ) ) ) ? $paged : 1; 
    // Get the posts using the 'post' and 'news' post types
    $posts = get_posts( array(
            'paged' => $paged,
            'post__not_in' => get_option( 'sticky_posts' ),
            'posts_per_page' => 10,            
            'post_type' => listing,
            'tax_query' => array(
                array (
                'taxonomy' => 'flux_rss',
                'field' => 'slug',
                'terms' => 'oui',
                )
            ), 
        )
    ); 


// Loop through the posts and Push the desired data to the array we've initialized earlier in the form of an object
foreach( $posts as $post ) {

    $id = $post->ID; 
    $post_thumbnail = ( has_post_thumbnail( $id ) ) ? get_the_post_thumbnail_url( $id ) : null;

    $posts_data[] = (object) array( 
        'id' => $id, 
        'title' => $post->post_title,
        'excerpt' => wp_json_encode($post->post_excerpt), 
        'link' => $post->guid,
        'featured_img_src' => $post_thumbnail
    );
}                  
return $posts_data;                   

}

Mais je reçois un caractère spécial dans la réponse alors comment je peux transformer la réponse json en utf8

[{
    "id": 2087,
    "title": "Avec l\u2019ONPA",
    "excerpt": "\"Avec cette association cr\\u00e9\\u00e9e en 1971, les s\\u00e9niors de 55 ans et plus, en activit\\u00e9 professionnelle ou non, et vivant \\u00e0 domicile, m\\u00e8nent une vie active...\"",
    "link": "http:\/\/localhost\/focus\/?post_type=listing&p=2087",
    "featured_img_src": "http:\/\/localhost\/focus\/wp-content\/uploads\/2018\/05\/avec-lonpa.jpg"
},
1
Ahmad Zammali

Le problème est ici:

'excerpt' => wp_json_encode($post->post_excerpt), 

Ce tableau sera passé par wp_json_encode par l'API REST. Il sera donc codé deux fois. Supprimez donc le wp_json_encode ici, et tout se passera bien. Il s'agira simplement d'encoder, il ne s'agit pas de la valeur lisible par l'homme.

Par exemple. placez-le dans la console de développement de votre navigateur et affichez le résultat. Vous verrez qu'il ne s'agit pas d'un problème:

 enter image description here 

Comme vous pouvez le constater, a été codé en tant que \u2019O car 20190 est le code de caractère unicode de et HTML ne peut pas utiliser ces caractères de manière native sans codage. C'est pourquoi lorsque vous inspectez le HTML, vous verrez &, mais lorsque vous le visualisez dans le navigateur, vous voyez &, la même chose se passe ici.

2
Tom J Nowell