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

- 报错截图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.
相关产品推荐
相关产品推荐

