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

Dart调用WordPress REST API返回JSON存在字符未转义问题如何解决?

这个问题在Dart端和WordPress服务端都可以修复,优先推荐Dart端处理,无需改动服务端配置,适配性更强。

方案1:Dart端处理(推荐)

你遇到的编码展示异常本质是WordPress REST API返回的rendered类字段默认会将特殊字符转换为HTML实体编码(比如”对应右双引号、—对应长破折号),你当前的代码仅做了UTF-8字节解码,没有对HTML实体做二次转义。
处理步骤:

  1. 在pubspec.yaml中引入HTML实体转义包:
dependencies:
  html_unescape: ^2.0.0
  1. 拉取数据后对rendered字段做转义处理,示例代码:
import 'package:http/http.dart' as http; 
import 'dart:convert';
import 'package:html_unescape/html_unescape.dart';

// 初始化转义实例,全局复用即可
final HtmlUnescape htmlUnescape = HtmlUnescape();

Future<List> fetchWpPosts() async {
  var url = Uri.parse('https://example.com/wp-json/wp/v2/posts');
  // 注意:你原有请求头里的charset=UTF-16是错误配置,WordPress接口默认返回UTF-8编码,修正后可避免额外编码问题
  final response = await http.get(url, headers: {'Accept': 'application/json; charset=UTF-8'});
  var convertDatatoJson = jsonDecode(utf8.decode(response.bodyBytes));
  // 可直接在这里批量处理所有内容的转义
  for (var post in convertDatatoJson) {
    post['title']['rendered'] = htmlUnescape.convert(post['title']['rendered']);
    post['content']['rendered'] = htmlUnescape.convert(post['content']['rendered']);
    // 其他需要转义的字段同理处理
  }
  return convertDatatoJson;
}

方案2:WordPress服务端修改

如果希望接口直接返回未转义的字符,可以在WordPress主题的functions.php文件中添加钩子,过滤REST API的返回结果:

add_filter('rest_prepare_post', function($response, $post, $request) {
    $data = $response->get_data();
    // 对标题、内容等字段做HTML实体解码
    $data['title']['rendered'] = html_entity_decode($data['title']['rendered'], ENT_QUOTES | ENT_HTML5, 'UTF-8');
    $data['content']['rendered'] = html_entity_decode($data['content']['rendered'], ENT_QUOTES | ENT_HTML5, 'UTF-8');
    $response->set_data($data);
    return $response;
}, 10, 3);

注意:该方案会修改接口的全局返回结果,如果有其他前端业务依赖原有HTML实体编码的格式,需要提前评估影响。

内容的提问来源于stack exchange,提问作者Martin Damyanov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:24:03