Flutter for OpenHarmony:html_unescape 安全解码 HTML 实体字符,从网页抓取数据到友好展示(文本转义处理) 深度解析与鸿蒙适配指南

Flutter for OpenHarmony:html_unescape 安全解码 HTML 实体字符,从网页抓取数据到友好展示(文本转义处理) 深度解析与鸿蒙适配指南

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net

前言

当我们从网页抓取数据(爬虫),或者接收富文本编辑器生成的后端接口时,常常会遇到像 <'  这样的 HTML 实体字符。如果直接显示在 UI 上,不仅丑陋,而且难以阅读。

html_unescape 是一个专为 Dart 设计的小型库,它能快速、准确地将这些编码后的实体字符还原为原始文本(如 <'、空格),兼容所有 HTML5 标准实体。

一、概念介绍/原理解析

1.1 基础概念

  • HTML Entity: 为了在 HTML 中显示保留字符(如 <),必须使用转义序列(&...;)。
  • Decoded Text: 还原后的字符,直接供人类阅读。
  • Named Entity: 如 &copy; -> ©
  • Numeric Entity: 如 &#169; -> ©

调用 HtmlUnescape

解码渲染

"Hello" & World (编码串)

核心解析逻辑

Hello & World (还原文本)

&😀 (数字实体)

😀 (表情符号)

1.2 进阶概念

虽然 flutter_html 等渲染库也能处理,但它主要用于渲染整个 HTML。若只需处理单行文本(如新闻标题),html_unescape 更轻量。

二、核心 API/组件详解

2.1 基础用法

最简单的字符串解码。

import'package:html_unescape/html_unescape.dart';voidmain(){final unescape =HtmlUnescape();// 基础符号print(unescape.convert('Flutter &amp; Dart: The &quot;Secret&quot; to 100% OHOS Fix!'));// 中文乱码修复 (如果是以实体形式存在)print(unescape.convert('&#20013;&#25991;'));// 输出: 中文}
在这里插入图片描述

2.2 小技巧

由于创建 HtmlUnescape 对象需要加载映射表(虽小但非零开销),建议在单例或静态变量中复用它。

classTextUtils{staticfinal _unescape =HtmlUnescape();staticStringclean(String input)=> _unescape.convert(input);}

三、常见应用场景

3.1 场景 1:RSS 阅读器

RSS Feed 中的标题和摘要通常包含大量的 HTML 实体,需解码后展示。

// RSS 解析器通常返回已解码的文本,但如果返回 raw XML:final title =parse(item.title).text;// 或者final cleanTitle = unescape.convert(item.rawTitle);
在这里插入图片描述

3.2 场景 2:搜索结果高亮

搜索引擎返回的摘要中,关键字被 <em> 包裹,需提取纯文本或自行构建高亮。

// 原始: "Hello <em>World</em>"// 解码后: "Hello <em>World</em>" (注意 unescape 只处理实体,不处理标签)// 若要处理实体如 "&lt;em&gt;" -> "<em>"

3.3 场景 3:聊天消息

防止用户输入被解释为 HTML(XSS),后端转义后,前端需在特定安全上下文中还原(如代码块内)。

classCodeBlockextendsStatelessWidget{finalString rawCode;// 后端返回如 "print(&quot;Hi&quot;)"@overrideWidgetbuild(BuildContext context){returnText(HtmlUnescape().convert(rawCode));// 显示 print("Hi")}}

四、OpenHarmony 平台适配

4.1 纯 Dart 实现

无平台依赖,OpenHarmony 完美支持。

五、完整示例代码

本示例模拟一个从网络获取新闻列表的场景,原始数据充斥着实体字符,App 将其清洗后展示。

import'package:flutter/material.dart';import'package:html_unescape/html_unescape.dart';classNewsFullDemoPageextendsStatelessWidget{constNewsFullDemoPage({super.key});@overrideWidgetbuild(BuildContext context){final unescape =HtmlUnescape();final articles =[{'t':'Breaking &amp; Hot: OHOS 5.0 Release','s':'New &lt;Features&gt; inside!'},{'t':'Caf&eacute; Life: Best Coffee &#9749;','s':'Visit us &copy; 2026'},];returnScaffold( appBar:AppBar(title:constText('实战:纯净新闻阅读')), body:ListView.separated( itemCount: articles.length, separatorBuilder:(_, __)=>constDivider(), itemBuilder:(context, index){final a = articles[index];returnListTile( title:Text(unescape.convert(a['t']!), style:constTextStyle(fontWeight:FontWeight.bold)), subtitle:Text(unescape.convert(a['s']!)), trailing:constIcon(Icons.navigate_next),);},),);}}
在这里插入图片描述

六、总结

html_unescape 是处理 Web 数据的必备小工具。

最佳实践

  1. 按需使用:不要对所有文本都调用,不仅浪费性能,还可能破坏原本就是想显示 &amp; 的意图。
  2. 安全性:解码后的文本若直接插入 HTML(如 WebView),务必小心 XSS 攻击。通常在 Flutter Widget (Text) 中显示是安全的。

Read more

Flutter 三方库 angel3_static 的鸿蒙化适配指南 - 实现高性能静态资源服务、支持应用内 H5 活动页托管与虚拟目录分发

Flutter 三方库 angel3_static 的鸿蒙化适配指南 - 实现高性能静态资源服务、支持应用内 H5 活动页托管与虚拟目录分发

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 angel3_static 的鸿蒙化适配指南 - 实现高性能静态资源服务、支持应用内 H5 活动页托管与虚拟目录分发 前言 在进行 Flutter for OpenHarmony 的全栈开发时,有时我们需要在应用内部运行一个简单的 Web 服务器(例如为了托管离线的 H5 活动页、本地帮助文档,或者作为一个本地数据的 API 代理)。angel3_static 是 Angel3 框架中的静态文件处理插件。它能让你轻松地将鸿蒙沙箱中的物理目录映射为 HTTP 静态资源服务。本文将探讨如何在鸿蒙端利用该库构建本地资源中心。 一、原理解析 / 概念介绍 1.1 基础原理 angel3_static 作用于 Angel3

By Ne0inhk
【Linux 实战】从0到1手搓日志系统:附完整代码

【Linux 实战】从0到1手搓日志系统:附完整代码

前言:         上文我们讲了线程的同步以及理解并实现生产者消费者模式【Linux系统】深入理解线程同步,实现生产消费模型-ZEEKLOG博客         本文我们来讲一下如何手搓日志库,为下一篇文件:线程池的实现做铺垫! 日志与策略模式 什么是设计模式         IT行业这么火,涌入的人很多,俗话说林子大了啥鸟都有。大佬和菜鸡们两极分化的越来越严重。为了让菜鸡们不太拖大佬的后腿,于是大佬们针对一些经典的常见的场景,给定了一些对应的解决方案,这个就是设计模式。 认识日志         计算机中的日志是记录系统和软件运行中发生事件的文件,主要作用是监控运行状态、记录异常信息,帮助快速定位问题并支持程序员进行问题修复。它是系统维护、故障排查和安全管理的重要工具。         日志已有现成的解决方案,如:spdlog、glog、Boost.Log等等。 日志的格式有以下的标准:         1.时间戳        2.日志的等级        3.日志的内容 还可以加入:         1.文件名        2.行号

By Ne0inhk
Linux(一) | 初识Linux与目录管理基础命令掌握

Linux(一) | 初识Linux与目录管理基础命令掌握

个人主页-爱因斯晨 文章专栏-Linux 文章目录 * 个人主页-爱因斯晨 * 文章专栏-Linux * 一、前言 * 1.为什么学习Linux * 2.操作系统概述: * 3.常见的操作系统: * 二、初识Linux * 1.诞生 * 2.什么是Linux内核 * 3.常见的发行版(热门:centos,ubuntu) * 三、基础命令 * 1.目录结构 * 2. Linux命令入门 * 2.1 Linux命令基础 * 2.2 基础格式 * 2.3 开关机 * 2.4 目录操作 一、前言 1.为什么学习Linux 如果把操作系统分为两类: 个人桌面操作系统:windows,macos

By Ne0inhk
Flutter 三方库 fft 的鸿蒙化适配指南 - 实现端侧高性能快速傅里叶变换、支持音频频谱分析与信号处理域的频域特征提取实战

Flutter 三方库 fft 的鸿蒙化适配指南 - 实现端侧高性能快速傅里叶变换、支持音频频谱分析与信号处理域的频域特征提取实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 fft 的鸿蒙化适配指南 - 实现端侧高性能快速傅里叶变换、支持音频频谱分析与信号处理域的频域特征提取实战 前言 在进行 Flutter for OpenHarmony 的音频可视化、语音识别前置预处理或振动传感器信号分析应用开发时,将信号从“时域(Time Domain)”转换到“频域(Frequency Domain)”是不可逾越的基础步。快速傅里叶变换(FFT)是处理这类实时计算的工业级标准算法。fft 库为 Dart 提供了纯净且经过高度优化的 FFT 实现。本文将探讨如何在鸿蒙端构建极致的信号分析链路。 一、原直观解析 / 概念介绍 1.1 基础原理 FFT 是一种通过减少计算冗余来实现离散傅里叶变换(DFT)的加速算法(将复杂度从 $O(

By Ne0inhk