符号 | UNICODE | 符号 | UNICODE | ||||
HTML | JS | CSS | HTML | JS | CSS | ||
⇠ | ⇠ | \u21E0 | E0 | ⇢ | ⇢ | \u21E2 | E2 |
⇡ | ⇡ | \u21E1 | E1 | ⇣ | ⇣ | \u21E3 | E3 |
↞ | ↞ | \u219E | 9E | ↠ | ↠ | \u21A0 | A0 |
↟ | ↟ | \u219F | 9F | ↡ | ↡ | \u21A1 | A1 |
← | ← | \u2190 | 90 | → | → | \u2192 | 92 |
↑ | ↑ | \u2191 | 91 | ↓ | ↓ | \u2193 | 93 |
↔ | ↔ | \u2194 | 94 | ↕ | ↕ | \u2195 | 95 |
⇄ | ⇄ | \u21C4 | C4 | ⇅ | ⇅ | \u21C5 | C5 |
↢ | ↢ | \u21A2 | A2 | ↣ | ↣ | \u21A3 | A3 |
⇞ | ⇞ | \u21DE | DE | ⇟ | ⇟ | \u21DF | DF |
↫ | ↫ | \u21AB | AB | ↬ | ↬ | \u21AC | AC |
⇜ | ⇜ | \u21DC | DC | ⇝ | ⇝ | \u21DD | DD |
↚ | ↚ | \u219A | 9A | ↛ | ↛ | \u219B | 9B |
↮ | ↮ | \u21AE | AE | ↭ | ↭ | \u21AD | AD |
⇦ | ⇦ | \u21E6 | E6 | ⇨ | ⇨ | \u21E8 | E8 |
⇧ | ⇧ | \u21E7 | E7 | ⇩ | ⇩ | \u21E9 | E9 |
▲ | ▲ | \u25B2 | B2 | ► | ► | \u25BA | BA |
▼ | ▼ | \u25BC | BC | ◄ | ◄ | \u25C4 | C4 |
➔ | ➔ | \u2794 | 94 | ➙ | ➙ | \u2799 | 99 |
➨ | ➨ | \u27A8 | A8 | ➲ | ➲ | \u27B2 | B2 |
➜ | ➜ | \u279C | 9C | ➞ | ➞ | \u279E | 9E |
➟ | ➟ | \u279F | 9F | ➠ | ➠ | \u27A0 | A0 |
➤ | ➤ | \u27A4 | A4 | ➥ | ➥ | \u27A5 | A5 |
➦ | ➦ | \u27A6 | A6 | ➧ | ➧ | \u27A7 | A7 |
➵ | ➵ | \u27B5 | B5 | ➸ | ➸ | \u27B8 | B8 |
➼ | ➼ | \u27BC | BC | ➽ | ➽ | \u27BD | BD |
➺ | ➺ | \u27BA | BA | ➳ | ➳ | \u27B3 | B3 |
↷ | ↷ | \u21B7 | B7 | ↶ | ↶ | \u21B6 | B6 |
↻ | ↻ | \u21BB | BB | ↺ | ↺ | \u21BA | BA |
↵ | ↵ | \u21B5 | B5 | ↯ | ↯ | \u21AF | AF |
➾ | ➾ | \u27BE | BE |
符号 | UNICODE | 符号 | UNICODE | ||||
HTML | JS | CSS | HTML | JS | CSS | ||
❤ | ❤ | \u2764 | 64 | ✈ | ✈ | \u2708 | 08 |
★ | ★ | \u2605 | 05 | ✦ | ✦ | \u2726 | 26 |
☀ | ☀ | \u2600 | 00 | ◆ | ◆ | \u25C6 | C6 |
◈ | ◈ | \u25C8 | C8 | ▣ | ▣ | \u25A3 | A3 |
☻ | ☻ | \u263B | 3B | ☺ | ☺ | \u263A | 3A |
☹ | ☹ | \u2639 | 39 | ✉ | ✉ | \u2709 | 09 |
☎ | ☎ | \u260E | 0E | ☏ | ☏ | \u260F | 0F |
✆ | ✆ | \u2706 | 06 | � | � | \uFFFD | \FFFD |
☁ | ☁ | \u2601 | 01 | ☂ | ☂ | \u2602 | 02 |
❄ | ❄ | \u2744 | 44 | ☃ | ☃ | \u2603 | 03 |
❈ | ❈ | \u2748 | 48 | ✿ | ✿ | \u273F | 3F |
❀ | ❀ | \u2740 | 40 | ❁ | ❁ | \u2741 | 41 |
☘ | ☘ | \u2618 | 18 | ❦ | ❦ | \u2766 | 66 |
☕ | ☕ | \u9749 | 49 | ❂ | ❂ | \u2742 | 42 |
☥ | ☥ | \u2625 | 25 | ☮ | ☮ | \u262E | 2E |
☯ | ☯ | \u262F | 2F | ☪ | ☪ | \u262A | 2A |
☤ | ☤ | \u2624 | 24 | ✄ | ✄ | \u2704 | 04 |
✂ | ✂ | \u2702 | 02 | ☸ | ☸ | \u2638 | 38 |
⚓ | ⚓ | \u2693 | 93 | ☣ | ☣ | \u2623 | 23 |
⚠ | ⚠ | \u26A0 | A0 | ⚡ | ⚡ | \u26A1 | A1 |
☢ | ☢ | \u2622 | 22 | ♻ | ♻ | \u267B | 7B |
♿ | ♿ | \u267F | 7F | ☠ | ☠ | \u2620 | 20 |
符号 | UNICODE | 符号 | UNICODE | ||||
HTML | JS | CSS | HTML | JS | CSS | ||
$ | $ | \u0024 | >\0024<24 | ¢ | ¢ | \u00A2 | >\00A2<> |
£ | £ | \u00A3 | >\00A3<> | ¤ | ¤ | \u00A4 | >\00A4<> |
€ | € | \u20AC | AC | ¥ | ¥ | \u00A5 | >\00A5<> |
₱ | ₱ | \u20B1 | B1 | ₹ | ₹ | \u20B9 | B9 |
符号 | UNICODE | 符号 | UNICODE | ||||
HTML | JS | CSS | HTML | JS | CSS | ||
½ | ½ | \u00BD | >\00BD<> | ¼ | ¼ | \u00BC | >\00BC<> |
¾ | ¾ | \u00BE | >\00BE<> | ⅓ | ⅓ | \u2153 | 53 |
⅔ | ⅔ | \u2154 | 54 | ⅛ | ⅛ | \u215B | 5B |
⅜ | ⅜ | \u215C | 5C | ⅝ | ⅝ | \u215D | 5D |
‰ | ‰ | \u2030 | 30 | % | % | \u0025 | >\0025<25 |
< | < | \u003C | >\003C<3C | > | > | \u003E | >\003E<3E |
符号 | UNICODE | 符号 | UNICODE | ||||
HTML | JS | CSS | HTML | JS | CSS | ||
♩ | ♩ | \u2669 | 69 | ♪ | ♪ | \u266A | 6A |
♫ | ♫ | \u266B | 6B | ♬ | ♬ | \u266C | 6C |
♭ | ♭ | \u266D | 6D | ♯ | ♯ | \u266F | 6F |
符号 | UNICODE | 符号 | UNICODE | ||||
HTML | JS | CSS | HTML | JS | CSS | ||
| \u00A0 | >\00A0<> | ☐ | ☐ | \u2610 | 10 | |
☑ | ☑ | \u2611 | 11 | ☒ | ☒ | \u2612 | 12 |
✓ | ✓ | \u2713 | 13 | ✔ | ✔ | \u2714 | 14 |
✕ | ✕ | \u10005 | 005 | ✖ | ✖ | \u2716 | 16 |
✗ | ✗ | \u2717 | 17 | ✘ | ✘ | \u2718 | 18 |
符号 | UNICODE | 符号 | UNICODE | ||||
HTML | JS | CSS | HTML | JS | CSS | ||
★ | ★ | \u2605 | 05 | ✭ | ✭ | \u272D | 2D |
✮ | ✮ | \u272E | 2E | ☆ | ☆ | \u2606 | 06 |
✪ | ✪ | \u272A | 2A | ✡ | ✡ | \u2721 | 21 |
✯ | ✯ | \u272F | 2F | ✵ | ✵ | \u2735 | 35 |
✶ | ✶ | \u2736 | 36 | ✸ | ✸ | \u2738 | 38 |
✹ | ✹ | \u2739 | 39 | ✺ | ✺ | \u273A | 3A |
✱ | ✱ | \u2731 | 31 | ✲ | ✲ | \u2732 | 32 |
✴ | ✴ | \u2734 | 34 | ✳ | ✳ | \u2733 | 33 |
✻ | ✻ | \u273B | 3B | ✽ | ✽ | \u273D | 3D |
❋ | ❋ | \u274B | 4B | ❆ | ❆ | \u2746 | 46 |
❄ | ❄ | \u2744 | 44 | ❅ | ❅ | \u2745 | 45 |
符号 | UNICODE | 符号 | UNICODE | ||||
HTML | JS | CSS | HTML | JS | CSS | ||
♈ | ♈ | \u2648 | 48 | ♉ | ♉ | \u2649 | 49 |
♊ | ♊ | \u264A | 4A | ♋ | ♋ | \u264B | 4B |
♌ | ♌ | \u264C | 4C | ♍ | ♍ | \u264D | 4D |
♎ | ♎ | \u264E | 4E | ♏ | ♏ | \u264F | 4F |
♐ | ♐ | \u2650 | 50 | ♑ | ♑ | \u2651 | 51 |
♒ | ♒ | \u2652 | 52 | ♓ | ♓ | \u2653 | 53 |
符号 | UNICODE | 符号 | UNICODE | ||||
HTML | JS | CSS | HTML | JS | CSS | ||
♚ | ♚ | \u265A | 5A | ♛ | ♛ | \u265B | 5B |
♜ | ♜ | \u265C | 5C | ♝ | ♝ | \u265D | 5D |
♞ | ♞ | \u265E | 5E | ♟ | ♟ | \u265F | 5F |
♔ | ♔ | \u2654 | 54 | ♕ | ♕ | \u2655 | 55 |
♖ | ♖ | \u2656 | 56 | ♗ | ♗ | \u2657 | 57 |
♘ | ♘ | \u2658 | 58 | ♙ | ♙ | \u2659 | 59 |
符号 | UNICODE | 符号 | UNICODE | ||||
HTML | JS | CSS | HTML | JS | CSS | ||
♠ | ♠ | \u2660 | 60 | ♣ | ♣ | \u2663 | 63 |
♥ | ♥ | \u2665 | 65 | ♦ | ♦ | \u2666 | 66 |
♤ | ♤ | \u2664 | 64 | ♧ | ♧ | \u2667 | 67 |
♡ | ♡ | \u2661 | 61 | ♢ | ♢ | \u2662 | 62 |
符号 | UNICODE | 符号 | UNICODE | ||||
HTML | JS | CSS | HTML | JS | CSS | ||
Α | Α | \u0391 | 91 | Β | Β | \u0392 | 92 |
Γ | Γ | \u0393 | 93 | Δ | Δ | \u0394 | 94 |
Ε | Ε | \u0395 | 95 | Ζ | Ζ | \u0396 | 96 |
Η | Η | \u0397 | 97 | Θ | Θ | \u0398 | 98 |
Ι | Ι | \u0399 | 99 | Κ | Κ | \u039A | 9A |
Λ | Λ | \u039B | 9B | Μ | Μ | \u039C | 9C |
Ν | Ν | \u039D | 9D | Ξ | Ξ | \u039E | 9E |
Ο | Ο | \u039F | 9F | Π | Π | \u03A0 | A0 |
Ρ | Ρ | \u03A1 | A1 | Σ | Σ | \u03A3 | A3 |
Τ | Τ | \u03A4 | A4 | Υ | Υ | \u03A5 | A5 |
Φ | Φ | \u03A6 | A6 | Χ | Χ | \u03A7 | A7 |
Ψ | Ψ | \u03A8 | A8 | Ω | Ω | \u03A9 | A9 |
符号 | UNICODE | 符号 | UNICODE | ||||
HTML | JS | CSS | HTML | JS | CSS | ||
☨ | ☨ | \u2628 | 28 | ☩ | ☩ | \u2629 | 29 |
✝ | ✝ | \u271D | 1D | ✞ | ✞ | \u271E | 1E |
✟ | ✟ | \u271F | 1F | ✠ | ✠ | \u2720 | 20 |
✚ | ✚ | \u271A | 1A | † | † | \u2020 | 20 |
✢ | ✢ | \u2722 | 22 | ✤ | ✤ | \u2724 | 24 |
✣ | ✣ | \u2723 | 23 | ✥ | ✥ | \u2725 | 25 |
符号 | UNICODE | 符号 | UNICODE | ||||
HTML | JS | CSS | HTML | JS | CSS | ||
® | ® | \u00AE | >\00AE<> | © | © | \u00A9 | >\00A9<> |
℗ | ℗ | \u2117 | 17 | ™ | | \u0099 | >\0099<99 |
℠ | ℠ | \u2120 | 20 |
符号 | UNICODE | 符号 | UNICODE | ||||
HTML | JS | CSS | HTML | JS | CSS | ||
« | « | \u00AB | >\00AB<> | » | » | \u00BB | >\00BB<> |
‹ | | \u008B | >\008B<8B | › | | \u009B | >\009B<9B |
“ | “ | \u201C | 1C | ” | ” | \u201D | 1D |
‘ | ‘ | \u2018 | 18 | ’ | ’ | \u2019 | 19 |
• | • | \u2022 | 22 | ◦ | ◦ | \u25E6 | E6 |
¡ | ¡ | \u00A1 | >\00A1<> | ¿ | ¿ | \u00BF | >\00BF<> |
℅ | ℅ | \u2105 | 05 | № | № | \u2116 | 16 |
& | & | \u0026 | >\0026<26 | @ | @ | \u0040 | >\0040<40 |
℞ | ℞ | \u211E | 1E | ℃ | ℃ | \u2103 | 03 |
℉ | ℉ | \u2109 | 09 | ° | ° | \u00B0 | >\00B0<> |
| | \u007C | >\007C<7C | ¦ | ¦ | \u00A6 | ||
– | – | \u2013 | 13 | — | — | \u2014 | 14 |
… | … | \u2026 | 26 | ¶ | ¶ | \u00B6 | >\00B6<> |
∼ | ∼ | \u223C | 3C | ≠ | ≠ | \u2260 |
三种用法都在里面了
nicode 联盟(Unicode Consortium)
Unicode 联盟(Unicode Consortium)开发了 Unicode 标准(Unicode Standard)。他们的目标是使用标准的 Unicode 转换格式(即 UTF,全称 Unicode Transformation Format)取代现有的字符集。
Unicode 标准是一个成功的创举,在 HTML、XML、Java、JavaScript、E-mail、ASP、PHP 中都得到实现。Unicode 标准也得到许多操作系统和所有现代浏览器的支持。
Unicode 联盟与领先的标准开发组织合作,这些组织有 ISO、W3C 和 ECMA。
Unicode 字符集
Unicode 可以由不同的字符集实现。最常用的编码是 UTF-8 和 UTF-16:
字符集 | 描述 |
---|---|
UTF-8 | UTF8 中的字符可以是 1 到 4 字节长。UTF-8 可以代表 Unicode 标准中的任何字符。UTF-8 向后兼容 ASCII。UTF-8 是电子邮件和网页的首选编码。 |
UTF-16 | 16 位 Unicode 转换格式是一种可变长度的 Unicode 字符编码,能够编码整个 Unicode 指令表。UTF-16 主要用于操作系统和环境,如 Microsoft Windows、Java 和 .NET。 |
提示:Unicode 的前 128 个字符(与 ASCII 一一对应)使用一个与 ASCII二进制值相同的八位组进行编码,使有效的 ASCII 文本在进行 UTF-8 编码时也是有效的。
提示:所有的 HTML 4 处理器支持 UTF-8,所有的 HTML 5 和 XML 处理器支持 UTF-8 和 UTF-16!
HTML5 标准:Unicode UTF-8
因为 ISO-8859 中字符集大小是有限的,且在多语言环境中不兼容,所以 Unicode 联盟开发了 Unicode 标准。
Unicode 标准覆盖了(几乎)所有的字符、标点符号和符号。
Unicode 使文本的处理、存储和运输,独立于平台和语言。
HTML-5 中默认的字符编码是 UTF-8。
下面列出了一些 HTML5 支持的 UTF-8 字符集:
字符集 | 十进制 | 十六进制 |
---|---|---|
C0 控制与基本的 Latin(C0 Controls and Basic Latin) | 0-127 | 0000-007F |
C1 控制与 Latin-1 的补充(C1 Controls and Latin-1 Supplement) | 128-255 | 0080-00FF |
Latin 扩展 A(Latin Extended-A) | 256-383 | 0100-017F |
Latin 扩展 B(Latin Extended-B) | 384-591 | 0180-024F |
如果 HTML5 网页使用不同于 UTF-8 的字符,则需要在 <meta> 标签中指定,如下:
实例
<meta charset="ISO-8859-1">
如您还有不明白的可以在下面与我留言或是与我探讨QQ群308855039,我们一起飞!
周的时候,朋友圈的直升飞机不知道为什么就火了,很多朋友开着各种花式飞机带着起飞。
图片来自网络
还没来得及了解咋回事来着,这个直升飞机就到的微博热搜。
图片来自网络
后面越来越多人开来他们的直升飞机,盘旋在朋友圈上方。于是很多朋友开来他们的坦克,专打直升飞机,一轰一个准。
图片来自网络
好了,说回正题!
程序员朋友应该都很熟悉 Unicode (万国码),它几乎包含世界上所有符号,比如组成直升飞机这几个特殊符号对应的 Unicode 码分别为:
ps:推荐一个网站,可以根据符号搜对应的 Unicode 码:https://unicode.yunser.com/unicode
除了这些正常字符以外,Unicode 还包含着各种各样的奇葩字符。
除了正常的我们熟知的文字以外,Unicode 中还有一些奇怪的文字,比如下面这些文字
这咋读?某少?
世代?
恩?超出认知范围
除了这些奇怪文字以外,Unicode 还有一些奇葩的的符号。
例如下面一整套麻将牌:
一整套的扑克牌:
一整套国际象棋:
image-20200725215319183
除了这些,通过组合符合,我们还可以造出各种各样的颜文字(๑•̀ㅂ•́)و✧、
另外 Unicode 还收录着我们常用的 Emoji 。
除了这些之外,Unicode 中还有一些特殊字符的,利用这些字符,我们还可以玩出很多有趣的骚操作。
Unicode 有一类字符称为组合字符,它可以附加在前一个非组合字符上,从而使整体看起来像是一个字符。
组合字符原来目的是为了解决一些地区语言、文字特殊的需要,比如说泰文声调符号与母音符号。
正常使用的情况下,这些组合字符数量都会有一些限制。但是在 Unicode 组合字符设计上,并没有加这种限制,这样使我们可以无限加这类组合字符。
利用这个特性,可以达到一些恶搞效果,比如「击穿天花板」与「凿穿地板」的效果。
上面实现原理其是利用以下两个组合字符:
上翻字符
下翻字符
只要复制这两个字符相应的 HTML 代码,跟在正常的字符后面,就可以使这两个字符附加在普通字符上,比如下面实现效果为
黑̮̑
Unicode 码值通常使用 U+N(16 进制N 代表码值),比如 A 的码值为 U+0041。
在 HTML 中 Unicode 可以使用 N;(十进制,N 代表码值)表示
在 JS 中 Unicode 中需要使用] \uN(16 进制N 代表码值)表示
只要我们在普通字符多复制几个这类附加字符,就可以形成上述「击穿」效果。
还记得上面说的泰文吗,曾经有一段时间贴吧,很流行一种喷射文,比如下面的效果。
向左喷
向右喷
左右互喷
这种喷射文实际原理就是利用泰文中声调符号附加在其他正常符号上。
不过现在这个效果貌似已经没办法再复现了,现在我们只能看到这样的效果:
在一些老版本的系统/浏览器可能还能看到这种效果,知道的小伙伴留言区可以告知一下。
Unicode 中还有一类格式字符,不可见,不可打印,主要作用于调整字符的显示格式,所以我们将其称为零宽字符。
零宽字符主要有以下几类:
零宽度空格符 (zero-width space) U+200B : 用于较长单词的换行分隔
零宽度非断空格符 (zero width no-break space) U+FEFF : 用于阻止特定位置的换行分隔
零宽度连字符 (zero-width joiner) U+200D : 用于阿拉伯文与印度语系等文字中,使不会发生连字的字符间产生连字效果
零宽度断字符 (zero-width non-joiner) U+200C : 用于阿拉伯文,德文,印度语系等文字中,阻止会发生连字的字符间的连字效果
左至右符 (left-to-right mark) U+200E : 用于在混合文字方向的多种语言文本中(例:混合左至右书写的英语与右至左书写的希伯来语),规定排版文字书写方向为左至右
右至左符 (right-to-left mark) U+200F : 用于在混合文字方向的多种语言文本中,规定排版文字书写方向为右至左
利用零宽字符不不可见的特性,我们也可以玩出一些骚效果。
发布微博的时候,如果内容都是空格,将没办法发布。
但是如果我们将零宽字符,比如说「零宽度空格符 U+200B」复制到微博,这样我们就可以发布空白微博。
我们可以利用 Chrome 浏览器的控制台复制零宽字符,操作方式如下:
发布效果如下:
真的没有改 HTML 导致的.jpg
对于一些内部论坛或者说小说网站来说,可以通过零宽字符在帖子或小说内容嵌入隐形水印。
当这些内容被一些爬虫复制到其他网站时,我们就可以通过隐形水印,轻松查找时那位用户泄漏内容。
隐形水印主要原理就是将用户信息比如用户名,通过一定算法转成零宽字符,这样普通用户浏览时完全看不到这个水印。
如果内容被复制到其他网站,隐形谁赢也被复制,只要找到这个水印,将这些零宽字符反转成用户名即可。
下面展示一种转换方法,JS 代码主要参考以下 Github 项目:
https://github.com/umpox/zero-width-detection
隐形水印生成方法
第一步我们需要将明文字符串每个字符都转成二进制串。
// 每个字符转为二进制,用空格分隔
const textToBinary = username => (
username
.split('')
// charCodeAt 将字符转成相应的 Unicode 码值
.map(char => char.charCodeAt(0).toString(2))
.join(' ')
);
示例如下:
第二步,将二进制串转为零度字符串,转换规则如下:
const binaryToZeroWidth = binary => (
binary.split('').map((binaryNum) => {
const num = parseInt(binaryNum, 10);
if (num === 1) {
return '\u200b'; // \u200b 零宽度字符(zero-width space)
} else if(num===0) {
return '\u200c'; // \u200c 零宽度断字符(zero-width non-joiner)
}
return '\u200d'; // \u200d 零宽度连字符 (zero-width joiner)
}).join('\ufeff') // \ufeff 零宽度非断空格符 (zero width no-break space)
);
最终加密方法如下:
const encode = username => {
const binaryUsername = textToBinary(username);
const zeroWidthUsername = binaryToZeroWidth(binaryUsername);
return zeroWidthUsername;
};
使用加密方法将明文字符串加密之后,加密字符串肉眼是看不到了,但是实际还是存在的。
实际上,如果我们将加密之后字符串复制到 BEJSON 网站,就可以看到字符。
image-20200722083507869
另外你还可以把加密字符串复制到 IDEA 中,可以看到相应的 Unicode 编码值。
解密隐形水印
知道了加密的方式,解密其实就很简单,我们只要按照相反步骤的来就可以了。
第一步,将隐形水印按照以下规则转换为二进制串。转换规则如下:
const zeroWidthToBinary = string => (
string.split('\ufeff').map((char) => { // \ufeff 零宽度非断空格符 (zero width no-break space)
if (char === '\u200b') { // \u200b 零宽度字符(zero-width space)
return '1';
} else if(char === '\u200c') { // \u200c 零宽度断字符(zero-width non-joiner)
return '0';
}
return ' ';
}).join('')
);
调用该方法,隐形水印转成二进制串。
第二步,将二进制再转为相应的字符。
const binaryToText = string => (
// fromCharCode 二进制转化
string.split(' ').map(num => String.fromCharCode(parseInt(num, 2))).join('')
);
最终解密方法如下:
const decode = zeroWidthUsername => {
const binaryUsername = zeroWidthToBinary(zeroWidthUsername);
const textUsername = binaryToText(binaryUsername);
return textUsername;
};
解密示例如下:
我们常用的短网址,域名后面会跟上一串随机串,从而实现短网址到长网址的映射。比如以下网址:
https://sourl.cn/iLyn9S
然而我们可以利用零宽字符也可以实现短网址的效果,,比如下面这个网站,就可以生成这类短网址。
https://zws.im/
可以看到这个短网址后面看不到任何字符,实际上这后面跟着一串零宽字符。当浏览器访问该短网址时,后端程序只要反解密的后面零宽字符,拿到相应的网址,然后在做跳转就可以到指定的网站。
反解密的原理可以参考上面隐形水印的代码
日常开发过程中,我们有时需要从一些文件中读取文本内容,然后做相应的处理。
有时候我们可能会碰到一些诡异的现象,比如我们之前碰到的例子。
后台程序从 Excel 读取文本内容,然后程序中判断是读取的文本内容是否与指定的字符串相等。
然后当我们读取一份 Excel 内容后,返现这段比较逻辑怎么也通过不了。本来以为是 Excel 内容存在空格什么的,但是打开 Excel 仔细一看,跟指定字符串一模一样,并没有什么其他字符。
第一次碰到这种例子,没有什么经验,真的排查了很久,到最后都有点怀疑人生了。最后无意间将文本内容复制到了 IDEA 中,才发现整理混杂着零宽字符!
如果各位小伙伴也碰到这类问题,不妨将复制文本内容,然后到 IDEA 中查看是否存在某些看不见字符~
这两个星期一直很忙,一直都在 9106 的节奏,真的是累,所以断更了一周!
所幸最近项目提测,稍微轻松了一点,能有点划水时间来写写文章。不过再提起笔来写文章,就有点断节奏了!
这篇文章墨迹了很久才水出来,下周开始再次恢复周更的节奏,再忙再累,每周都来一篇。
欢迎各位小伙伴,每周来这里蹲我,Gank 我!!!
好了,我是楼下小黑哥,下周见!!!
*请认真填写需求信息,我们会在24小时内与您取得联系。