HTML中长破折号应使用命名实体—或十进制数字实体—,因其语义明确、编码无关、全浏览器兼容;直接粘贴U+2014字符在非UTF-8环境易乱码,且CMS可能误转,而—与–、-语义及宽度均不同,不可混用。

HTML 中 — 实体到底该用哪个?
直接写 —(U+2014)在大多数现代浏览器里能显示,但它是“裸字符”,不是 HTML 实体。真正符合 HTML 规范的长破折号实体只有 —(命名)或 —(十进制数字实体)。别用 —(十六进制)——虽然技术上合法,但旧版 IE 和部分邮件客户端不认。
为什么 — 比直接粘贴 — 更可靠?
直接复制粘贴破折号容易出问题:
- 编辑器或 CMS 可能自动转义成其他符号(比如把
—当作–或-) - 文件编码若非 UTF-8(如 ISO-8859-1),
—会变成乱码或方块 -
—是语义明确的 HTML 实体,和文档编码无关,所有浏览器都支持
示例对比:<p>前端开发—从零开始</p><div class="aritcle_card flexRow">
<div class="artcardd flexRow">
<a class="aritcle_card_img" href="/xiazai/skill9263" title="Html2md"><img
src="https://img.php.cn/upload/skill/000/000/081/179249945220127.jpg" alt="Html2md" ></a>
<div class="aritcle_card_info flexColumn">
<a href="/xiazai/skill9263" title="Html2md">Html2md</a>
<p>使用 Readability + Turndown 将 HTML 页面转换为干净的、Agent 友好的 Markdown。去除导航栏、广告、页脚、Cookie 横幅、社交按钮等干扰元素。支持 URL...</p>
</div>
<a href="/xiazai/skill9263" title="Html2md" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
</div>
</div>
<p><span>立即学习</span>“<a href="https://pan.quark.cn/s/cb6835dc7db1" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">前端免费学习笔记(深入)</a>”;</p> 安全;<p>前端开发—从零开始</p>
<p><span>立即学习</span>“<a href="https://pan.quark.cn/s/cb6835dc7db1" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">前端免费学习笔记(深入)</a>”;</p> 在非 UTF-8 环境下可能崩。
— 和 –、短横线 - 的区别不能混
三者语义和宽度完全不同:
-
—(长破折号,U+2014):用于句子中断、补充说明,如他说得对——但没说全 -
–(短破折号,U+2013):用于范围或连接,如第1–5页、北京–上海高铁 -
-(连字符,U+002D):仅用于单词内断行或复合词,如well-known、e-mail
用错会破坏可访问性(屏幕阅读器读法不同)和排版专业性。CSS 无法替代语义——border-bottom 再像也不是 —。
实际排版中容易被忽略的细节
长破折号前后是否加空格,取决于语言习惯:
- 英文排版:
—前后**不加空格**(text—text) - 中文排版:按出版规范,
—前后通常**各加一个不换行空格**,避免挤在一起,如— - 千万别用普通空格——会被浏览器合并,必须用
更隐蔽的问题:某些 CMS 或富文本编辑器(如 WordPress Classic Editor)会自动把 — 转成 – 或删掉,上线前务必检查源码。


















