web-dev-qa-db-ja.com

jsonの残りのAPIのutf8エンコーディング

私は投稿を取得するためのカスタムREST AP​​Iを作成します

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;                   

}

しかし、私はどのように私はutf8にJSON応答を変換することができますので、応答でいくつかの特別な文字を得る

[{
    "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

問題はここにあります:

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

その配列はREST AP​​Iによってwp_json_encodeを通過するので、二重にエンコードされます。したがって、ここでwp_json_encodeを削除してください。これはうまくエンコードされ、文字通りの人間読み取り可能な値ではありません。

例えば。それをあなたのブラウザの開発コンソールに入れて結果を出力すれば、問題ないことがわかります。

enter image description here 

ご覧のとおり、\u2019OのUnicode文字コードであるため、20190としてエンコードされています。HTMLでは、何らかの形式のエンコードなしでこれらの文字をネイティブに使用することはできません。 HTMLを調べると&が表示されますが、ブラウザで表示すると&が表示されるのと同じことがここで行われています。

2
Tom J Nowell