使用方法
- 在「原文本」框里填或者粘贴要处理的文字,默认示例是
Hello 2026;单次最多 5000 个字符,留空会得到明确提示而不是空白结果。 - 点「生成镜像」或在文本框里按 Ctrl 加 Enter,结果区立刻出现镜像文本,下面一行同步给出字符数、被替换字符数与覆盖率。
- 点「复制结果」把镜像文本复制到剪贴板。如果原文里有中文、空格或 emoji,提示行会说明有几个字符没有镜像字形、已原样保留。
- 想核对单个字符到底变成什么,翻到「对照表」一节:62 行字符映射表默认显示前 12 行,点「加载更多」展开全部,也可以导出 CSV 或按 TSV 复制。
- 点「载入示例」把输入框还原成默认的 Hello 2026,用来检查结果区与本文档里的示例是否一致,也是排查字体显示问题的最快办法。
这个工具能解决什么问题
第一类需求是社交平台上的花式排版。镜像文字在昵称、签名、评论区里很显眼,但手动一个字一个字去找对应字符既慢又容易漏。Mirror文本生成器一次处理整段文字,结果可以直接复制粘贴,不需要安装任何输入法或插件。
第二类需求是搞清楚「倒过来」到底做了什么。很多人以为镜像文本是把字翻转过来,实际上它做的是两件独立的事:先把字符顺序倒过来,再把每个字符换成形状相近的另一个字符。本页把这两步分开呈现,你能清楚看到哪一步产生了哪个变化。
第三类需求是批量处理前的试算。要在脚本里批量转换之前,先拿一小段样本验证规则是否可复现:同样的输入在本页永远得到同样的输出,没有随机成分,因此可以放心把规则搬到自己的代码里。
本页不做这些事:不做真正的图形镜像渲染(那需要画布或 CSS 变换,不是字符替换);不做大小写转换、全角半角转换或拼音转换;也不保证结果在所有设备上都能正常显示——镜像字形依赖字体是否收录了对应码位。
原理与规则说明
Mirror文本生成器的算法只有两步,且顺序固定。第一步把输入按 Unicode 码点拆成字符数组并整体反序;第二步遍历反序后的数组,逐个字符在镜像表里查替换,表里没有的字符原样保留。用式子表达就是 out = reverse(chars).map(c => T[c] || c).join(''),其中 T 是那张 62 项的镜像表。
为什么按码点而不是按 16 位码元。JavaScript 字符串内部按 UTF-16 存储,emoji 与部分生僻字由两个码元(代理对)组成。直接按索引反序会把代理对拆开,产生乱码;按码点遍历后,一个 emoji 始终是一个整体,反序后仍然完整,只是没有镜像字形、原样保留。
为什么有些字符看起来没变。镜像表里有一批字符的镜像字形就是它自己:大写字母 H、I、N、O、S、X、Z,小写字母 l、o、s、x、z,以及数字 0 和 8。它们在表里确实存在,只是映射前后相同,所以既计入字符数也不计入「被替换」数——这就是默认示例里 Hello 2026 只有 4 个字符被替换的原因。
镜像只是形似。这些字符是 Unicode 里本来就有的独立字形,长得像某个字母翻转后的样子,但编码完全不同,也不携带「这是镜像」的信息。因此复制到不支持这些码位的字体里会显示成方框或问号,搜索引擎与读屏软件也会把它们当成完全不同的字符来处理。
结果是确定的。整个流程没有任何随机数,也不依赖时间、语言或设备;同一段文本在本页生成的镜像文本永远逐字相同,便于比对与复用。
完整示例(默认输入实测)
示例条件与页面默认值完全一致,原文本是 Hello 2026(共 10 个字符)。逐步核对:
- 第一步反序:Hello 2026 拆成 10 个字符后倒过来,得到
6202 olleH; - 第二步替换:6 换成 9、2 换成 ᄅ、0 保持 0、2 换成 ᄅ、空格保持空格、o 保持 o、l 保持 l、l 保持 l、e 换成 ǝ、H 保持 H;
- 最终结果:9ᄅ0ᄅ ollǝH;
- 统计:字符数 10,被替换 4(两个 2、一个 6、一个 e),覆盖率 4 ÷ 10 = 40.0%。
注意数字的变化最容易被忽略:6 与 9 互为镜像,所以反序之后 6 会变成 9;2 用的是一个独立的镜像字符 ᄅ,它看起来像反过来的 2,但编码与普通的 2 完全不同。把结果粘回输入框再生成一次,会得到另一个方向的结果,可以用来验证规则是否对称。
对照表
第一张表是 8 组常见输入与输出,全部直接显示;数值列为字符数、被替换字符数与覆盖率:
| 原文本 | 镜像结果 | 字符数 | 被替换 | 覆盖率 |
|---|---|---|---|---|
| Hello 2026 | 9ᄅ0ᄅ ollǝH | 10 | 4 | 40.0% |
| abc | ɔqɐ | 3 | 3 | 100.0% |
| ABC | ƆᗺⱯ | 3 | 3 | 100.0% |
| 123 | ƐᄅƖ | 3 | 3 | 100.0% |
| Wow | ʍoM | 3 | 2 | 66.7% |
| Mirror 2026 | 9ᄅ0ᄅ ɹoɹɹᴉW | 11 | 8 | 72.7% |
| 你好 | 好你 | 2 | 0 | 0.0% |
| Hello, World! | !plɹoM ,ollǝH | 13 | 4 | 30.8% |
第二张表是完整的字符映射表,覆盖 26 个大写字母、26 个小写字母与 10 个数字,共 62 行:默认显示前 12 行,点「加载更多」展开全部,也可整表导出 CSV 或按 TSV 复制。
| 原字符 | 镜像字符 |
|---|---|
| A | Ɐ |
| B | ᗺ |
| C | Ɔ |
| D | ᗡ |
| E | Ǝ |
| F | Ⅎ |
| G | ⅁ |
| H | H |
| I | I |
| J | ſ |
| K | ʞ |
| L | ⅃ |
| M | W |
| N | N |
| O | O |
| P | Ԁ |
| Q | Ό |
| R | ᴚ |
| S | S |
| T | ⊥ |
| U | ∩ |
| V | Λ |
| W | M |
| X | X |
| Y | ⅄ |
| Z | Z |
| a | ɐ |
| b | q |
| c | ɔ |
| d | p |
| e | ǝ |
| f | ɟ |
| g | ƃ |
| h | ɥ |
| i | ᴉ |
| j | ɾ |
| k | ʞ |
| l | l |
| m | ɯ |
| n | u |
| o | o |
| p | d |
| q | b |
| r | ɹ |
| s | s |
| t | ʇ |
| u | n |
| v | ʌ |
| w | ʍ |
| x | x |
| y | ʎ |
| z | z |
| 0 | 0 |
| 1 | Ɩ |
| 2 | ᄅ |
| 3 | Ɛ |
| 4 | ㄣ |
| 5 | ϛ |
| 6 | 9 |
| 7 | ㄥ |
| 8 | 8 |
| 9 | 6 |
映射表是固定的字符对应关系,不随上方输入变化;上方结果区才是你自己的实算结果。
输入范围、边界与精度说明
- 长度上限。单次最多 5000 个字符(按码点计)。超限时提示行会给出实际字符数与上限,不会截断后静默处理,避免你以为拿到了完整结果。
- 空文本。输入框为空时不做猜测,直接给出「原文本为空」的提示,结果区与统计一并清空,不留下上一次的旧结果误导。
- 表外字符。空格、换行、标点、中文与 emoji 都没有镜像字形,一律按原样保留并参与反序;提示行会告诉你这类字符的数量,而不是报错。
- 代理项与 emoji。按码点遍历保证一个 emoji 不会被拆成两个乱码字符,但它的形状不会被镜像,最终仍是原字符,只是位置被倒过来了。
- 字体与显示。结果依赖字体是否收录这些码位。同一段结果在系统 A 上正常、在系统 B 上可能显示成方框,这是字体缺字,不是生成错误;重要场合建议先小范围试发。
- 全程本地。所有处理只在当前浏览器执行,不发起网络请求,也不写 Cookie 或 localStorage,关闭页面即清空。
常见问题
为什么结果是倒过来的,而不是把字翻转?
因为镜像文本做的是字符级替换:先把整段文字反序,再把每个字符换成形状相近的另一个字符。真正的图形翻转需要画布或 CSS 变换,本页只处理字符,所以顺序必然是反的。
为什么有些字母完全没变?
大写 H、I、N、O、S、X、Z,小写 l、o、s、x、z,以及数字 0 与 8,它们的镜像字形就是自己。它们计入字符数但不计入被替换数,所以覆盖率不会因为这些字符而升高。
复制到别的地方显示成方框怎么办?
说明目标应用的字体没有收录这些码位。这是字体缺字,不是生成错误;换一个字体或平台再试,重要内容建议只把镜像文本当作装饰,不要承载关键信息。
中文能镜像吗?
不能。镜像表只覆盖英文字母与数字,汉字没有对应的镜像字形,会原样保留并参与反序。输入「你好」得到的是「好你」,顺序变了、字形没变。
超过 5000 个字符会怎样?
提示行会给出实际字符数与 5000 的上限,同时不清空你输入的原文,方便你删减后重新生成;不会截断后返回一个看似正常的不完整结果。
结果会不会每次都不一样?
不会。整个流程没有任何随机成分,也不依赖时间与设备;同一段文本生成的镜像文本永远逐字相同,可以放心用于比对和批量脚本验证。
换行和空格怎么处理?
它们不在镜像表里,因此原样保留,但会随整体一起反序。多行文本的行序也会被倒过来,处理诗歌或代码注释时要留意这一点。
结果会被上传吗?
不会。所有处理只在你当前浏览器本地完成,页面不发起任何网络请求,也不写 Cookie 或 localStorage。打开开发者工具的 Network 面板连点几次生成,始终是空的。