零宽字符应用场景及前端解决方案

news2025/1/11 2:21:05

零宽字符(Zero Width Characters)是一类在文本中不可见但具有特定功能的特殊字符。称为零宽字符,也叫幽灵字符。它们在显示时不占据任何空间,但在文本处理和显示中发挥着重要作用。这些字符主要包括零宽度空格、零宽度非连接符、零宽度连接符和零宽度无断行空格等。以下是对零宽字符的详细解析:

Unicode – The World Standard for Text and Emojiicon-default.png?t=O83Ahttps://home.unicode.org/

一、零宽字符的特点

  • 不可见性:零宽字符在大多数程序或编辑器中是不可见的,它们不占据任何显示空间。
  • 功能性:尽管不可见,但零宽字符在文本处理、排版、隐写术和程序开发中扮演着重要角色。
  • Unicode编码:零宽字符是Unicode字符集中的一部分,每个字符都有对应的Unicode码位。

二、常见的零宽字符及其用途

  1. 零宽度空格(Zero-Width Space, ZWSP)
    • Unicode码位:U+200B
    • 用途:用于较长单词的换行分隔,防止在不应该换行的地方发生换行。
  2. 零宽度非断空格符(Zero Width No-Break Space, ZWNBSP)
    • Unicode码位:U+FEFF(注意:U+FEFF通常作为字节顺序标记,但在某些上下文中也用作非断空格符)
    • 用途:用于阻止特定位置的换行分隔,确保文本在特定位置不断行。
  3. 零宽度连接符(Zero-Width Joiner, ZWJ)
    • Unicode码位:U+200D
    • 用途:在某些需要复杂排版语言(如阿拉伯语、印地语)中,使两个本不会发生连字的字符产生连字效果。
  4. 零宽度非连接符(Zero-Width Non-Joiner, ZWNJ)
    • Unicode码位:U+200C
    • 用途:用于阿拉伯文、德文、印度语系等文字中,阻止会发生连字的字符间的连字效果,保持字符的独立形态。
  5. 左至右符(Left-to-Right Mark, LRM)
    • Unicode码位:U+200E
    • 用途:在混合文字方向的多种语言文本中,规定排版文字书写方向为左至右。
  6. 右至左符(Right-to-Left Mark, RLM)
    • Unicode码位:U+200F
    • 用途:在混合文字方向的多种语言文本中,规定排版文字书写方向为右至左。

三、零宽字符的应用场景

  1. 数据防爬:将零宽度字符插入文本中,可以干扰爬虫的关键字匹配,从而保护数据不被轻易爬取。
  2. 信息传递:通过自定义组合的零宽度字符,可以在用户复制文本时携带不可见信息,实现信息的隐蔽传递。
  3. 隐形水印:利用零宽度字符的不可见性,可以在文件中添加隐形水印,用于追踪文件的分享者。
  4. 加密信息分享:零宽度字符可用于加密敏感信息,通过特定的浏览器插件进行解密,实现隐蔽的信息分享。
  5. 逃脱敏感词过滤:在需要避免敏感词过滤的场景中,可以使用零宽度字符来绕过过滤机制,保持信息的原意。

综上所述,零宽字符虽然不可见,但在文本处理、排版、隐写术和程序开发中具有广泛的应用价值。理解和正确使用这些字符,可以帮助解决一些复杂的文本处理和显示问题。

四、实验

1、vs code中的现象
 2、浏览器中的现象

 3、在记事本中的现象 

    选择 “显示 Unicode 控制字符”,也可以‭看到这类特殊符号

五、前端解决方案 

在 Vue 中,直接通过指令(directive)来处理字符串,比如过滤掉零宽字符和首尾空格,并不是一个典型的用法,因为指令主要用于操作 DOM 或添加响应式行为,而不是处理数据本身。不过,你可以通过结合使用计算属性(computed properties)或方法(methods)来预处理数据,然后在模板中展示处理后的数据。

方法一:使用计算属性

在你的 Vue 组件中,可以使用计算属性来过滤字符串。计算属性基于它们的响应式依赖进行缓存。只有在相关响应式依赖发生改变时它们才会重新求值。

<template>  
  <div>{{ filteredText }}</div>  
</template>  
  
<script>  
export default {  
  data() {  
    return {  
      rawText: " \u200B Hello, world! \u200B ", // \u200B 是零宽空格字符  
    };  
  },  
  computed: {  
    filteredText() {  
      // 过滤掉零宽字符和首尾空格  
      return this.rawText.replace(/[\u200B\u200C\u200D\uFEFF\xA0]+/g, '').trim();  
    },  
  },  
};  
</script>

方法二:使用方法

如果你需要在多个地方处理类似的字符串,并且不想每次都创建计算属性,可以定义一个方法来进行处理。

<template>  
  <div>{{ filterText(rawText) }}</div>  
</template>  
  
<script>  
export default {  
  data() {  
    return {  
      rawText: " \u200B Hello, world! \u200B ", // \u200B 是零宽空格字符  
    };  
  },  
  methods: {  
    filterText(text) {  
      return text.replace(/[\u200B\u200C\u200D\uFEFF\xA0]+/g, '').trim();  
    },  
  },  
};  
</script>

自定义指令(可选,不推荐)

虽然不推荐,但如果你确实想通过自定义指令来实现类似的功能,你需要意识到指令主要用于操作 DOM,而不是处理数据。不过,你可以通过自定义指令来修改 DOM 元素的文本内容。

<template>  
  <div>{{ filterText(rawText) }}</div>  
</template>  
  
<script>  
export default {  
  data() {  
    return {  
      rawText: " \u200B Hello, world! \u200B ", // \u200B 是零宽空格字符  
    };  
  },  
  methods: {  
    filterText(text) {  
      return text.replace(/[\u200B\u200C\u200D\uFEFF\xA0]+/g, '').trim();  
    },  
  },  
};  
</script>

注意,使用自定义指令来处理数据并不是 Vue 的推荐做法,因为它将数据处理逻辑与 DOM 操作混合在一起,使得代码难以维护和理解。通常,你应该优先考虑使用计算属性或方法来处理数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2131581.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++ 高频面试题】STL 你了解多少呢?vector 的底层实现原理

文章目录 1. 常见的 STL 容器2.vector 和 list 的区别3. vector 的底层原理4. push_back() 和 emplace_back() 区别 1. 常见的 STL 容器 &#x1f34e;①序列容器 vector&#xff08;向量&#xff09;&#xff1a;是一个动态数组实现&#xff0c;提供高效的随机访问和在尾部进行…

基于R语言结构方程模型分析与实践技术应用

结构方程模型&#xff08;Sructural Equation Model&#xff09;是一种建立、估计和检验研究系统中多变量间因果关系的模型方法&#xff0c;它可以替代多元回归、因子分析、协方差分析等方法&#xff0c;利用图形化模型方式清晰展示研究系统中变量间的因果网络关系&#xff0c;…

信息安全数学基础(9)素数的算数基本定理

前言 在信息安全数学基础中&#xff0c;素数的算数基本定理&#xff08;也称为唯一分解定理或算术基本定理&#xff09;是一个极其重要的定理&#xff0c;它描述了正整数如何唯一地分解为素数的乘积。这个定理不仅是数论的基础&#xff0c;也是许多密码学算法&#xff08;如RSA…

【算法专场】分治(上)

目录 前言 什么是分治&#xff1f; 75. 颜色分类 算法分析 算法步骤 算法代码 912. 排序数组 - 力扣&#xff08;LeetCode&#xff09; 算法分析 算法步骤 算法代码 215. 数组中的第K个最大元素 - 力扣&#xff08;LeetCode&#xff09; 算法分析 算法步骤 ​编辑…

【Redis入门到精通一】什么是Redis?

目录 Redis 1. Redis的背景知识 2.Redis特性 3.Redis的使用场景 4.Ubuntu上安装配置Redis Redis Redis在当今编程技术中的地位可以说非常重要&#xff0c;大多数互联网公司内部都在使用这个技术&#xff0c;熟练使用Redis已经成为开发人员的一个必备技能。本章将带领读者…

yolov5实战全部流程

本科生阶段除了在中等以上的985和某些特定的CS强项院校&#xff0c;无意愿研究生学习的本科生是不建议学习人工智能这一专业的&#xff0c;保研学生也许可以在实验室打工推荐信学习接触到此类事件&#xff0c;此项blog主要是对yolov5的实践性项目&#xff0c;yolov5作为最具有代…

python 函数 封装

封装 函数的参数是&#xff1a;变量 def 函数(参数):print(参数)if __name__ __main__:函数(参数)函数(参数2)函数的参数是&#xff1a; 字典 import requests# 定义一个字典 data {} 地址 "https://webdriveruniversity.com/" 请求方法 getdata["url"…

【数据结构】选择题错题集

这里注意原本p后面也是有节点的。 这里只有遍历前面的链表找到尾节点连接即可。 快排是交换排序。 不要想象只有这两个节点&#xff0c;还有其他节点省略了。 筛选法就是向下调整算法。用向下调整建堆从最后一个节点的父亲开始。 这里错位相减法是乘4&#xff0c;所以最后要除三…

超详细!外婆都能看懂的Stable Diffusion入门教程,AI绘画SD零基础入门到精通教程!

一、前言 如今的AI绘画界有两大最强工具&#xff0c;一个是Midjourney &#xff0c;一个是StableDiffusion。Midjourney生成图片的质量非常高&#xff0c;可问题就是 Midjourney 的图片怎么精准的控制&#xff0c;或者是不改变某个物体的情况下更换背景等等&#xff0c;实在是…

虚拟化数据恢复—断电导致虚拟机目录项被破坏的数据恢复案例

虚拟化数据恢复环境&#xff1a; 某品牌服务器&#xff08;部署VMware EXSI虚拟机&#xff09;同品牌存储&#xff08;存放虚拟机文件&#xff09;。 虚拟化故障&#xff1a; 意外断电导致服务器上某台虚拟机无法正常启动。查看虚拟机配置文件发现这台故障虚拟机除了磁盘文件以…

视频监控平台是如何运作的?EasyCVR视频汇聚平台的高效策略与实践

随着科技的飞速发展&#xff0c;视频监控平台在社会安全、企业管理、智慧城市构建等领域发挥着越来越重要的作用。一个高效的视频监控平台&#xff0c;不仅依赖于先进的硬件设备&#xff0c;更离不开强大的视频处理技术作为支撑。这些平台集成了多种先进的视频技术&#xff0c;…

长短期记忆网络和UKF的结合|Python代码例程

结合长短期记忆网络(LSTM)和无迹卡尔曼滤波器(UKF)的技术在机器人导航和状态估计中具有广泛的应用前景。 文章目录 结合LSTM和UKF的背景结合LSTM和UKF的优势应用实例研究现状Python代码示例结合LSTM和UKF的背景 长短期记忆网络(LSTM)是一种特殊的递归神经网络(RNN),…

51单片机-IIC实验1-AT24C02数据存储(实战1)

本实验主要是针对IIC的具体案例进行实战&#xff0c;主要利用支持IIC通信的芯片AT24C02进行与51单片机构成通信。51&#xff08;AT89C52&#xff09;本身不带有IIC通信&#xff0c;所以&#xff0c;我们需要给51写一个IIC时序&#xff0c;以便与支持IIC协议的AT24C02数据存储芯…

逆向学习系列(三)Charles配合Drony的使用(真机)

在抓包中&#xff0c;有时可能出现无法抓包的情况&#xff0c;这时&#xff0c;可以尝试使用Drony转发抓包。 一、安装Drony 将电脑上的Drony_1.3.154_APKPure.apk复制粘贴进真机的Download文件夹中。在真机上找到这个apk&#xff0c;点击安装。 二、在VMOS中安装Drony 在真…

【Petri网导论学习笔记】Petri网导论入门学习(四)

Petri网导论入门学习&#xff08;四&#xff09; Petri 网导论学习笔记&#xff08;4&#xff09;1.2 标识网与网系统定义 1.8定义 1.9例 1.4存在空标识网的几种情况1.2 小结1.2学习完应达到的要求 Petri 网导论学习笔记&#xff08;4&#xff09; 如需学习转载请注明原作者并附…

55页可编辑PPT | 集团制造企业数字化转型顶层设计方案

这份PPT文档是一份关于集团制造企业数字化转型的顶层业务设计方案。文档详细介绍了企业在后ERP时代面临的挑战&#xff0c;以及如何通过Oracle解决方案来实现数字化转型。 数字化转型的三大要点集中在满足利益相关者的期望&#xff0c;以企业价值为核心引领业务模式的创新&…

DHCP协议原理大全与全局地址、接口地址池、中继代理三种方式配置

DHCP协议原理与配置 1.DHCP动态主机配置协议 原理:通过配置DHCP服务器给主机自动分配IP地址; 优点;1)可以动态学习或者获取IP地址及网络参数; 2)减少人工配置数量 3)减少ip抵制冲突; 4)采用客户端/服务器通信模式,报文基于UDP,服务器端端口号67。客户端端口号68…

AS608指纹识别模块(上位机操作)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 3.工作原理&#xff1a;模块指令格式 4.工作原理&#xff1a;模块应答格式 5.工作原理步骤 三、程序设计 四、实验效果 五、资料获取 项目分享 一、介绍 AS608模块采用了国内著名指纹识别芯片公司杭州晟元芯片技…

灵活连接,无限可能—探索EtherCAT的拓扑艺术

EtherCAT技术具备快速响应和高效率的特点&#xff0c;在工业自动化领域显得至关重要&#xff0c;其灵活的拓扑结构是其核心优势&#xff0c;支持多样化的网络布局&#xff0c;无需交换机或集线器&#xff0c;简化布线&#xff0c;降低成本&#xff0c;提高系统可靠性和灵活性。…

【AI大模型】ChatGPT模型原理介绍(上)

目录 &#x1f354; 什么是ChatGPT&#xff1f; &#x1f354; GPT-1介绍 2.1 GPT-1模型架构 2.2 GPT-1训练过程 2.2.1 无监督的预训练语言模型 2.2.2 有监督的下游任务fine-tunning 2.2.3 整体训练过程架构图 2.3 GPT-1数据集 2.4 GPT-1模型的特点 2.5 GPT-1模型总结…