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

Dart中如何将原生字符串转换为HTML格式字符串?

解决原生字符串转HTML UTF-8实体编码问题

你提到的htmlEscape和Uri.dataFromString无效的原因是它们的设计目标和你的需求不匹配:

  • htmlEscape默认仅转义HTML特殊字符(<、>、&、"、'),不会处理中文这类Unicode字符;
  • Uri.dataFromString用于生成Data URI的编码,和HTML实体编码完全是两回事。

自定义转换函数实现需求

你可以通过遍历字符串的Unicode码点,手动将非ASCII字符(或指定范围的字符)转换为&#x开头的十六进制HTML实体。以下是Dart语言的实现示例:

转换所有非ASCII字符

String convertToHtmlEntity(String input) {
  final buffer = StringBuffer();
  for (final rune in input.runes) {
    if (rune > 127) {
      // 将Unicode码点转为4位十六进制,拼接HTML实体格式
      buffer.write('&#x${rune.toRadixString(16).padLeft(4, '0')};');
    } else {
      // ASCII字符直接保留
      buffer.writeCharCode(rune);
    }
  }
  return buffer.toString();
}

// 测试示例
void main() {
  const original = 'QQ登录';
  final result = convertToHtmlEntity(original);
  print(result); // 输出: QQ&#x767b;&#x5f55;
}

仅转换中文汉字

如果只需要转换中文(而非所有非ASCII字符),可以调整判断条件,限定Unicode范围(中文汉字的Unicode区间为0x4E00到0x9FA5):

String convertChineseToHtmlEntity(String input) {
  final buffer = StringBuffer();
  for (final rune in input.runes) {
    if (rune >= 0x4E00 && rune <= 0x9FA5) {
      buffer.write('&#x${rune.toRadixString(16).padLeft(4, '0')};');
    } else {
      buffer.writeCharCode(rune);
    }
  }
  return buffer.toString();
}

说明

  • 上述代码通过遍历字符串的runes(对应Unicode码点),确保正确处理多字节字符;
  • toRadixString(16)将码点转为十六进制字符串,padLeft(4, '0')保证输出为4位格式(符合HTML实体的常见写法);
  • 你可以根据需求修改判断条件,实现更精准的字符转换控制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 04:05:06