You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress REST API获取post_content换行致JSON无效解决方法

问题描述

在WordPress中创建自定义API路由时,整体功能运行正常,但获取文章post_content字段时出现异常:返回的JSON因内容包含未转义的换行符,不符合JSON格式规范,无法正常解析。
相关问题截图:

  • 报错截图1:JSON格式报错截图
  • 报错截图2:返回内容异常截图
    经测试,使用wp_strip_all_tags函数移除所有HTML标签后JSON可正常生效,但该方案会丢失内容格式,不符合需求——需要保留内容中的HTML标签。
    当前使用的代码片段:
'descripcion' => get_post_field('post_content', $post->ID)
解决方案

根本修复(推荐)

该问题绝大多数情况是自定义路由回调没有遵循WordPress REST API开发规范,手动拼接、输出JSON字符串,导致核心内置的特殊字符自动转义逻辑未生效。只要按照官方规范返回响应,核心会自动处理所有换行、特殊字符、HTML标签的转义,既保留完整HTML内容,也不会出现JSON格式错误。
参考正确写法:

function custom_route_callback( $request ) {
    // 原有业务逻辑:查询文章、处理其他字段
    $post_list = get_posts( [
        // 你的查询参数
    ] );
    $response_data = [];
    foreach ( $post_list as $post ) {
        $response_data[] = [
            // 其他自定义字段
            'descripcion' => get_post_field( 'post_content', $post->ID ),
            // 其他自定义字段
        ];
    }
    // 调用官方方法包装响应,禁止手动echo json_encode()后die/exit
    return rest_ensure_response( $response_data );
}

使用该方式返回数据时,不需要对post_content做任何额外处理,原生逻辑会自动完成合法转义,前端解析后可以拿到完整的带HTML标签的内容。

临时兼容方案

如果因特殊业务场景必须手动拼接输出JSON,不要自己写字符串替换逻辑转义,直接调用WordPress内置的wp_json_encode函数处理字段即可,该函数兼容不同PHP版本,会覆盖所有不符合JSON规范的特殊字符转义,同时完整保留HTML标签:

'descripcion' => wp_json_encode(
    get_post_field( 'post_content', $post->ID ),
    JSON_UNESCAPED_UNICODE
)

注意:wp_strip_all_tags能临时解决问题只是因为移除HTML标签时顺带处理了部分换行,本质是丢失内容的错误方案,非必要不要使用。

内容的提问来源于stack exchange,提问作者Gonzalo D.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 20:36:26