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

零宽字符(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.mfbz.cn/a/879006.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024 VMpro 虚拟机中如何给Ubuntu Linux操作系统配置联网

现在这是一个联网的状态 可以在商店里面下载东西 也能ping成功 打开虚拟网络编辑器 放管理员权限 进行设置的更改 选择DNS设置 按提示修改即可 注意的是首选的DNS服务器必须是114.114.114.114 原因 这边刚刚去查了一下 114.114.114.114 是国内的IP地址 8.8.8.8 是国外的I…

鸿蒙媒体开发系列04——音频播放

如果你也对鸿蒙开发感兴趣&#xff0c;加入“Harmony自习室”吧&#xff01;扫描下方名片&#xff0c;关注公众号&#xff0c;公众号更新更快&#xff0c;同时也有更多学习资料和技术讨论群。 1、如何选择音频播放开发方式 在HarmonyOS系统中&#xff0c;多种API都提供了音频播…

QUIC的loss detection学习

PTO backoff backoff 补偿 /ˈbkɒf/PTO backoff 是QUIC&#xff08;Quick UDP Internet Connections&#xff09;协议中的一种机制&#xff0c;用于处理探测超时&#xff08;Probe Timeout, PTO&#xff09;重传策略 它逐步增加探测超时的等待时间&#xff0c;以避免网络拥塞…

Web开发:使用C#创建、安装、调试和卸载服务

目录 一、创建服务 1.创建项目&#xff08;.NET Framework&#xff09; 2.重命名 3.编写逻辑代码 二、安装服务 1.方案一&#xff1a;利用VS2022安装文件的配置 选择添加安装程序 安装文件的介绍及配置 ​编辑​ 重新编译 工具安装 2.方案二&#xff1a;编写bat脚本安…

【嘉立创EDA】画PCB板中为什么要两面铺铜为GND,不能一面GND一面VCC吗?

在新手画板子铺铜时&#xff0c;经常会铺一面GND一面VCC。但一般情况下我们不会这样铺铜。下面将详细分析为什么要两面铺铜为GND&#xff0c;而不是一面GND一面VCC的原因&#xff1a; 提高散热能力 金属导热性&#xff1a;金属具有良好的导热性&#xff0c;铺铜可以有效分散PCB…

Oracle 19c异常恢复—ORA-01209/ORA-65088---惜分飞

由于raid卡bug故障,导致文件系统异常,从而使得数据库无法正常启动,客户找到我之前已经让多人分析,均未恢复成功,查看alert日志,发现他们恢复的时候尝试resetlogs库,然后报ORA-600 kcbzib_kcrsds_1错误 2024-09-15T17:07:32.55321508:00 alter database open resetlogs 2024-09-…

Debian11之DolphinScheduler使用

登录 默认用户名和密码 admin/dolphinscheduler123 http://192.168.111.180:12345/dolphinscheduler/ui基础配置 1、创建Worker【admin用户下】 创建项目的时候会指定Worker&#xff0c;这个配置决定了项目中的任务在哪个服务器执行 2、创建环境【admin用户下】 - 如果涉…

Linux搭建邮箱服务器(简易版)

本章是上一文档的简易版本搭建方式更为快速简洁&#xff08;只需要两条命令即可搭建&#xff09;&#xff0c;如果想了解更详细一些可以看我上一文档 Linux接发邮件mailx_linux mailx o365-CSDN博客文章浏览阅读857次&#xff0c;点赞25次&#xff0c;收藏19次。本文详细描述了…

spring security OAuth2 搭建资源服务器以及授权服务器/jdbc/jwt两种方案

一、认证服务器基于jdbc方式 如果不懂请移步上一篇文章&#xff1a;Spring security OAuth2 授权服务器搭建-CSDN博客 在上一篇文章中&#xff0c;TokenStore的默认实现为 InHenoryTokenStore 即内存存储&#xff0c;对于 CLient 信息&#xff0c;userDetaitsServce 接负责从存…

mqtt整体了解

整个系统的分布及功能 参考太极创客视频 整体分为三部分&#xff1a; 发布&#xff1a;实时发送到云平台&#xff1b;实现主体是传感器或被控对象 订阅&#xff1a;得到能够访问发布信息&#xff1b;主体是有查看和控制权限的对象 云平台&#xff1a;可以理解为有控制订阅者权…

Python 爬虫入门 - Request 静态页面数据获取

在现代 Web 开发中,HTTP 请求(Request)是与服务器进行通信的核心操作。无论是在前端还是后端开发中,数据的获取、传递以及处理都离不开请求的应用。特别是在静态页面的数据获取中,使用请求可以将页面变得更加动态和互动,从而大大提升用户体验,使得页面内容更加丰富和灵活…

MySQL_SQLYog简介、下载及安装(超详细)

课 程 推 荐我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448;入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448;虚 拟 环 境 搭 建 &#xff1a;&#x1…

行人动作行为识别系统源码分享

行人动作行为识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

Halo 开发者指南——项目运行、构建

准备工作 环境要求 OpenJDK 17 LTSNode.js 20 LTSpnpm 9IntelliJ IDEAGitDocker&#xff08;可选&#xff09; 名词解释 工作目录 指 Halo 所依赖的工作目录&#xff0c;在 Halo 运行的时候会在系统当前用户目录下产生一个 halo-next 的文件夹&#xff0c;绝对路径为 ~/ha…

网络高级项目( 基于webserver的工业数据采集和控制项目)

目录 一、项目要求&#xff1a; 二、演示效果&#xff1a; 设备端&#xff1a; Modbus用户控制端&#xff1a; 服务器端&#xff1a; 网页端&#xff1a; 三、 项目代码&#xff1a; Modbus用户控制端代码&#xff1a; 服务器端代码&#xff1a; 网页端代码&#xff1…

VirtualBox Install MacOS

环境搭建 git clone https://github.com/myspaghetti/macos-virtualbox 脚本配置 修改macos-guest-virtualbox.sh部分内容为 vm_name"macOS" # name of the VirtualBox virtual machine macOS_release_name"Catalina" # install &quo…

股指期货的详细玩法功能与应用解析

股指期货作为一种重要的金融衍生工具&#xff0c;为投资者提供了多样化的投资和风险管理手段。本文将详细探讨股指期货的三大主要功能&#xff1a;风险规避、价格发现和资产配置。 第一&#xff0c;风险规避功能 1.套期保值&#xff1a;股指期货的风险规避功能主要通过套期保值…

外观模式详解:如何为复杂系统构建简洁的接口

&#x1f3af; 设计模式专栏&#xff0c;持续更新中 欢迎订阅&#xff1a;JAVA实现设计模式 &#x1f6e0;️ 希望小伙伴们一键三连&#xff0c;有问题私信都会回复&#xff0c;或者在评论区直接发言 外观模式 外观模式&#xff08;Facade Pattern&#xff09;为子系统中的一组…

智能 Uber 发票 PDF 合并工具

在现代商务出行中&#xff0c;尤其是在跨国出差中&#xff0c;处理和整合大量 Uber 发票已成为一项不小的挑战。手动整理和合并这些发票不仅耗时&#xff0c;还容易出错。作为开发者&#xff0c;为什么不开发一个自动化工具&#xff0c;将这些任务交给代码来完成呢&#xff1f;…

成型的程序

加一个提示信息 加上python 常用的包 整个程序打包完 250M 安装 960MB matplot numpy pandas scapy pysearial 常用的包 (pyvisa)… … 啥都有 Python 解释器组件构建 要比 lua 容易的多 &#xff08;C/Rust 的组件库)