整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

零宽空格等控制字符的作用和代码处理

零宽空格的实现原理

零宽空格(Zero Width Space, ZWSP)是一个特殊的Unicode字符,编码为U+200B。它是一个不可见的字符,其宽度为零,不占用任何可见空间。在文本处理系统中,尽管它在视觉上是不可见的,但它在文本中确实存在,并可以作为潜在的断点,即允许在此位置断开行。这意味着如果一行文本过长需要自动换行时,文本可以在零宽空格的位置进行折行,而不影响单词的完整性。

应用场景

  1. 文本格式化和断行控制
  2. 在不允许在单词内自动换行的语言或特定格式中,零宽空格可以插入到长单词或URL中,允许这些文本在不影响阅读的情况下进行合适的换行。
  3. 在HTML和其他Web内容中,零宽空格常用于长无空格字符串的断行控制。
  4. 隐秘标记和文本隐藏
  5. 零宽空格可以用于在文本中隐藏信息,因为它在视觉上不可见。例如,可以通过在特定位置插入零宽空格来编码额外信息,这种技术有时用于数字水印或隐藏的标记。
  6. 在某些安全领域,零宽字符用于对抗自动文本分析工具,通过在文本中嵌入这些字符来“污染”数据,使自动处理变得更困难。
  7. 程序和网页开发
  8. 在编程中,特别是在Web开发中,零宽空格可以帮助处理和显示不断行的长字符串,如路径或特定代码段。
  9. 在用户界面开发中,零宽空格可以用来调整或微调文本显示,尽管这通常不是最佳实践。
  10. 排版和设计
  11. 在复杂的排版设计中,设计师可能使用零宽空格来精确控制文本的布局和行间距,尤其是在多语言排版中。
  12. 在电子书和PDF文档中,零宽空格可以帮助实现更优雅的文本格式,尤其是在处理多种语言和脚本时。

注意事项

虽然零宽空格在许多情况下都是有用的,但它也可能引起问题,特别是在文本处理和数据清洗中。不注意这些看不见的字符可能导致数据的意外错误、搜索失败、数据不一致等问题。因此,在处理来自不同源的文本数据时,了解和考虑这些不可见字符是非常重要的。

2 在Python中处理零宽空格

(Zero Width Space, Unicode编码为U+200B)通常可以通过字符串的替换操作来实现。这里有几种常见的方法来去除字符串中的零宽空格:

方法1: 使用str.replace()

str.replace() 方法是去除字符串中特定字符的一种直接方式。你可以使用它来替换零宽空格为一个空字符串:

original_string = "This is a test\u200b string with zero width space."
cleaned_string = original_string.replace('\u200b', '')
print(cleaned_string)

这个方法将去除字符串中所有的零宽空格。

方法2: 使用正则表达式

如果你需要去除字符串中的多种不可见字符,包括零宽空格,使用正则表达式是一个更强大的选择。Python的 re 模块可以帮助实现这一功能:

import re

original_string = "This is a test\u200b string with zero width space."
cleaned_string = re.sub(r'\u200b', '', original_string)
print(cleaned_string)

这个方法同样可以针对多种类型的不可见字符进行调整,只需修改正则表达式即可。

方法3: 使用translate()

另一个选项是使用字符串的 translate() 方法。这种方法可以在一个步骤中删除字符串中的多个不同类型的字符:

original_string = "This is a test\u200b string with zero width space."
remove_chars = dict.fromkeys([0x200b], None)
cleaned_string = original_string.translate(remove_chars)
print(cleaned_string)

这里,我们创建了一个字典,指定要删除的字符(零宽空格的Unicode编码是0x200B)映射到 None,这意味着这些字符将被删除。

方法4: 清除所有Unicode控制字符

去除字符串中所有的Unicode控制字符(包括但不限于零宽空格),可以使用更通用的正则表达式:

import re

original_string = "This is a test\u200b string with zero width space."
cleaned_string = re.sub(r'[\u200B-\u200D\uFEFF]', '', original_string)
print(cleaned_string)

这里,正则表达式涵盖了多个常见的Unicode控制字符。

3 常见的Unicode控制字符

在 Unicode 中,\u200B, \u200C, \u200D 以及 \uFEFF 分别代表一些特定的不可见字符,它们的用途和行为在文本处理中各有不同。这里是每个字符的详细说明:

\u200B - 零宽空格 (Zero Width Space, ZWS)

  • Unicode 编码:U+200B
  • 描述:一个不可见的分隔符,不占任何空间,用于可能的换行点。它允许在其点处断行,而不显示任何字符。

\u200C - 零宽非连接符 (Zero Width Non-Joiner, ZWNJ)

  • Unicode 编码:U+200C
  • 描述:在需要字符独立显示而不是与前后字符联合时使用。在一些书写系统如阿拉伯语和波斯语中非常有用,用于控制字符的连写表现。

\u200D - 零宽连接符 (Zero Width Joiner, ZWJ)

  • Unicode 编码:U+200D
  • 描述:用于促使两个字符生成一个单独的合成字符。常用于一些复杂书写系统的特定字形显示,或在新兴的表情符号序列中,如家庭组合或肤色变化的表情符号。

\uFEFF - 字节顺序标记 (Byte Order Mark, BOM)

  • Unicode 编码:U+FEFF
  • 描述:在 UTF-16 和 UTF-32 的编码序列中用作字节序的标记。在 UTF-8 中,虽然不必要,但有时用作标识文件是以 UTF-8 编码的标记。当用作普通文本中时,它通常被视为零宽不换行空格 (Zero Width No-Break Space)。

用途和影响

这些字符在现代文本处理和网络内容中扮演着关键角色,尤其是在多语言和多脚本环境中,它们帮助实现了细微的文本格式控制和视觉表现。然而,它们也可能导致文本处理上的问题,比如字符串匹配失败、文本渲染异常等,因此在处理文本数据时需要特别注意这些不可见字符的存在。在数据清洗和预处理阶段移除或适当处理这些字符,是确保数据质量和应用稳定性的重要步骤。

TML: HyperText Markup Language 超文本标记语言

HTML代码不区分大小写, 包括HTML标记、属性、属性值都不区分大小写;

任何空格或回车键在代码中都无效,插入空格或回车有专用的标记,分别是 、<br>

HTML标记中不要有空格,否则浏览器可能无法识别。

如何添加注释(comment:评论;注释)

<!-- -->
<comment></comment>
<!-- --> 不能留有空格


字符集

<meta http-equiv="Content-Type" content="text/html;charset=#"/>


<base target="_blank">

可以将a链接的默认属性设置为_blank属性

单个标签要有最好有结束符(可以没有结束符)

<br/> <img src="" width="" /> 

便于兼容XHTML(XHTML必须要有结束符)

HTML标签的属性值可以有引号,可以没有引号,为了提高代码的可读性,推荐使用引号(单引号和双引号),尽管属性值是整数,也推荐加上引号。

<marquee behavior="slide"></marquee> 

便于兼容XHTML(XHTML必须要有引号)

<marquee behavior=slide></marquee>

经过测试,以上程序都可以正确运行


HTML标签涉及到的颜色值格式:

color_name 规定颜色值为颜色名称的文本颜色(比如 "red")。

hex_number 规定颜色值为十六进制值的文本颜色(比如 "#ff0000")。

rgb_number 规定颜色值为 rgb 代码的文本颜色(比如 "rgb(255,0,0)")。

transparent 透明色 color:transparent

rgba(红0-255,绿0-255,蓝0-255,透明度0-1)

opacity属性: 就是葫芦娃兄弟老六(技能包隐身)

css:

div{opacity:0.1} /*取值为0-1*/

英文(颜色值)不区分大小写

HTML中颜色值:采用十六进制兼容性最好(十六进制显示颜色效果最佳)

CSS中颜色值:不存在兼容性

红色 #FF0000

绿色 #00FF00

蓝色 #0000FF

黑色: #000000

灰色 #CCCCCC

白色 #FFFFFF

青色 #00FFFF

洋红 #FF00FF

黄色 #FFFF00


请问后缀 html 和 htm 有什么区别?

答: 1. 如果一个网站有 index.html和index.htm,默认情况下,优先访问.html

2. htm后缀是为了兼容以前的DOS系统8.3的命名规范

XHTML与HTML之间的关系?

XHTML是EXtensible HyperText Markup Language的英文缩写,即可扩展的超文本标记语言.

XHTML语言是一种标记语言,它不需要编译,可以直接由浏览器执行.

XHTML是用来代替HTML的, 是2000年w3c公布发行的.

XHTML是一种增强了的HTML,它的可扩展性和灵活性将适应未来网络应用更多的需求.

XHTML是基于XML的应用.

XHTML更简洁更严谨.

XHTML也可以说就是HTML一个升级版本.(w3c描述它为'HTML 4.01')

XHTML是大小写敏感的,XHTML与HTML是不一样的;HTML不区分大小写,标准的XHTML标签应该使用小写.

XHTML属性值必须使用引号,而HTML属性值可用引号,可不要引号

XHTML属性不能简写:如checked必须写成checked="checked"

单标记<br>, XHTML必须有结束符<br/>,而HTML可以使用<br>,也可以使用<br/>

除此之外XHTML和HTML基本相同.


网页宽度设置多少为最佳?

960px


target属性值理解

_self 在当前窗口中打开链接文件,是默认值

_blank 开启一个新的窗口打开链接文件

_parent 在父级窗口中打开文件,常用于框架页面

_top 在顶层窗口中打开文件,常用语框架页面


字符集:

charset=utf-8

Gb2312 简单中文字符集, 最常用的中文字符

Gbk 简繁体字符集, 中文字符集

Big5 繁体字符集, 台湾等等

Utf-8 世界性语言的字符集

ANSI编码格式编码格式的扩展字符集有gb2312和gbk

单位问题:

HTML属性值数值型的一般不带单位, CSS必须带单位;


强制刷新

ctrl+F5

解如何在 JavaScript 中轻松地在字符串的字符之间添加空格。

在本文中,我们将学习如何在 JavaScript 中轻松地在字符串的字符之间包含空格。


1. String split() 和 Split join() 方法

要在字符串的字符之间添加空格,请在字符串上调用 split() 方法以获取字符数组,然后在数组上调用 join() 方法以使用空格分隔符连接字符。

例如:

function addSpace(str) {
  return str.split('').join(' ');
}const str1 = 'coffee';
const str2 = 'banana';console.log(addSpace(str1)); // c o f f e e
console.log(addSpace(str2)); // b a n a n a

String split() 方法使用指定的分隔符将字符串拆分为子字符串数组。

const str1 = 'coffee,milk,tea';
const str2 = 'sun-moon-star';console.log(str1.split(',')); // [ 'coffee', 'milk', 'tea' ]
console.log(str2.split('-')); // [ 'sun', 'moon', 'star' ]

通过使用空字符串 ('') 作为分隔符,我们将所有字符串字符拆分为单独的数组元素。

const str1 = 'coffee';
const str2 = 'banana';// Passing an empty string ('') to the split method// [ 'c', 'o', 'f', 'f', 'e', 'e' ]
console.log(str1.split(''));// [ 'b', 'a', 'n', 'a', 'n', 'a' ]
console.log(str2.split(''));

String join() 方法将数组中的每个字符串与分隔符组合在一起。 它返回一个包含连接数组元素的新字符串。

const arr = ['a', 'b', 'c', 'd'];console.log(arr.join(' ')); // a b c d
console.log(arr.join('-')); // a-b-c-d
console.log(arr.join('/')); // a/b/c/d

因此,将空格字符传递给 join() 会在结果串联中用空格分隔字符。

在某些情况下,字符串已经在某些字符之间包含空格。 在这种情况下,我们的方法会在字符之间添加更多空格。

function addSpace(str) {
  return str.split('').join(' ');
}// These strings have spaces between some characters
const str1 = 'co  ffee';
const str2 = 'bana  na';console.log(addSpace(str1)); // c o     f f e e
console.log(addSpace(str2)); // b a n a     n a

这是因为空格 (' ') 也是一个字符,就像一个字母,调用 split() 会使其成为数组中的一个单独元素,该元素将与其他空格组合。

// These strings have spaces between some characters
const str1 = 'co  ffee';
const str2 = 'bana  na';// The space characters are separate elements of the
// array from split()
/**
 * [
  'c', 'o', ' ',
  ' ', 'f', 'f',
  'e', 'e'
]
 */
console.log(str1.split(''));/**
 * [
  'b', 'a', 'n',
  'a', ' ', ' ',
  'n', 'a'
]
 */
console.log(str2.split(''));

如果我们想避免字符的多个间距,我们可以在 split() 和 join() 之间插入对 filter() 方法的调用。

function addSpace(str) {
  return str
    .split('')
    .filter((item) => item.trim())
    .join(' ');
}// The strings have spaces between some characters
const str1 = 'co  ffee';
const str2 = 'bana  na';console.log(addSpace(str1)); // c o f f e e
console.log(addSpace(str2)); // b a n a n a

Array filter() 方法返回一个新数组,该数组仅包含原始数组中的元素,传递给 filter() 的测试回调函数为其返回真值。 对空格 (' ') 调用 trim() 会产生一个空字符串 (''),这在 JavaScript 中不是真值。 因此,从 filter() 返回的结果数组中排除了空格。

小费

在 JavaScript 中,只有六个假值:false、null、undefined、0、''(空字符串)和 NaN。 其他所有值都是真实的。


2. for...of 循环

对于更命令式的方法,我们可以使用 JavaScript for...of 循环在字符串的字符之间添加一个空格。

function addSpace(str) {
  // Create a variable to store the eventual result
  let result = '';  for (const char of str) {
    // On each iteration, add the character and a space
    // to the variable
    result += char + ' ';
  }  // Remove the space from the last character
  return result.trimEnd();
}const str1 = 'coffee';
const str2 = 'banana';console.log(addSpace(str1)); // c o f f e e
console.log(addSpace(str2)); // b a n a n a

为了处理前面讨论的场景,其中字符串在某些字符之间有空格,请在每次迭代的字符上调用 trim(),并添加一个 if 检查以确保它是真实的,然后将它和空格添加到累积结果中:

function addSpace(str) {
  // Create a variable to store the eventual result
  let result = '';  for (const char of str) {
    // On each iteration, add the character and a space
    // to the variable    // If the character is a space, trim it to an empty
    // string, then only add it if it is truthy
    if (char.trim()) {
      result += char + ' ';
    }
  }  // Remove the space from the last character
  return result.trimEnd();
}const str1 = 'co  ffee';
const str2 = 'bana  na';console.log(addSpace(str1)); // c o f f e e
console.log(addSpace(str2)); // b a n a n a


关注七爪网,获取更多APP/小程序/网站源码资源!