— in HTML 怎么写:显示结果与常见错误
简答:— in HTML 的标准写法是 <code>—</code>,浏览器显示为“—”。也可用 <code>—</code> 或 <code>—</code>;若页面显示源码,先检查是否重复转义或漏写分号。
定义:<code>—</code> 是 HTML 命名字符引用,对应 Unicode U+2014 的 em dash,渲染结果为“—”。
先记住这三种等价写法
如果你只想在页面正文中输出长破折号,优先使用 —。它的显示结果是“—”,另外两种数字字符引用也指向同一个字符。HTML 字符引用通常以 & 开始、以分号结束,具体语法可查看 WHATWG HTML Standard 的字符引用说明。
| 源码写法 | 页面显示 | 类型 | 建议 |
|---|---|---|---|
&mdash; | — | 命名字符引用的源码展示写法 | 用于代码示例,不是正文输出 |
— | — | 命名字符引用 | 正文优先使用 |
— | — | 十进制字符引用 | 适合需要明确数字编码时使用 |
— | — | 十六进制字符引用 | 适合按 Unicode 编码书写 |
注意:表格第一行中的 &mdash; 是为了让读者看到字面量“—”。如果把它直接放在普通正文中,浏览器会显示“—”,而不会显示长破折号。
可直接复制运行的 HTML 示例
下面示例同时演示正文、属性值和代码展示三种场景。复制到新建的 HTML 文件后,用浏览器打开,正文应显示两个长破折号;鼠标悬停在链接上时,title 值应为 A—B。
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<title>— in HTML 示例</title>
</head>
<body>
<p>连接问题可以这样说明:先检查 DNS—再检查 MTU。</p>
<p>属性值示例:<a href="#" title="A—B">查看提示</a></p>
<p>要在页面上展示源码,请写成:<code>&mdash;</code></p>
</body>
</html>
示例中,真正被浏览器解析的正文使用 —;要展示字面量源码,则要把连接符号本身再写成 &。字符引用的命名、十进制和十六进制形式可对照 MDN 的 Character reference 说明。
—、– 和普通连字符怎么选
三者不是同一个字符,选择时先看语义,不要只按长度判断。em dash 常用于句子中的插入、转折或突然中断;en dash 常用于范围;普通连字符主要用于复合词或标识符。不同编辑规范对 em dash 两侧是否留空格可能不同,项目内应保持一致。
| 写法 | 显示 | 常见用途 |
|---|---|---|
— | — | 句中插入说明、转折或中断 |
– | – | 数字、日期或范围,例如 10–20 |
- | - | 连字符、命令参数、文件名和标识符 |
Google 技术文档风格指南也将 em dash 与 en dash 分开说明。若内容是代码、命令或 URL,不要为了排版把普通连字符替换成长破折号。
页面显示 — 时的排查顺序
- 先看源码是否少了分号:把
—写完整,不要写成&mdash。WHATWG 将缺少分号列为字符引用解析错误,统一保留分号最稳妥。 - 再检查是否重复转义:如果源码里出现
&mdash;,浏览器通常会先把&解码为普通&,最终页面显示字面量—。 - 检查代码展示层:在
pre或code中展示 HTML 源码时,需要把示例里的&写成&,否则浏览器会尝试解析示例。 - 检查编辑器或 CMS:有些编辑器会自动转义一次,模板又转义一次。修改前先保存原始源码,再逐层确认最终输出。
- 检查文件编码:如果直接输入字符“—”而不是实体,HTML 文件应使用 UTF-8,并保留
<meta charset="utf-8">。字符编码决定字节如何被解释,相关说明见 MDN 的 Character encoding 词条。
正文、属性值和源码示例的写法区别
在普通文本节点中,— 会被解析成“—”;在属性值中也可以使用它,例如 title="A—B" 的实际属性值是 A—B。但如果你是在文章中展示这段属性源码,展示层必须把其中的和号再转义一次。
| 目标 | 应写入页面源码 | 最终看到 |
|---|---|---|
| 正文显示长破折号 | — | — |
| 属性值为 A—B | title="A—B" | 提示文本为 A—B |
文章展示源码 — | &mdash; | 看到字面量 — |
如果页面需要 UTF-8,现代浏览器通常也能直接处理字符“—”;但在代码示例、模板或需要统一编码表示的场景中,使用字符引用更容易核对。MDN 也提醒,除必须转义的特殊字符外,不必无条件使用实体。
发布前的快速检查清单
- 正文目标是长破折号时,使用
—、—或—。 - 命名字符引用保留结尾分号,不写成
&mdash。 - 展示源码时只增加一层转义:页面源码写
&mdash;,读者看到的是—。 - 属性值
title="A—B"的实际值是 A—B,不是字面量—。 - 不要把
–、-和—当作同一个字符。 - 直接输入“—”时,确认文件和响应内容采用 UTF-8。
本文为技术说明,解析行为以 WHATWG HTML 标准与浏览器实现为准。
常见问题
— in HTML 最正确的写法是什么?
标准、易读的写法是 <code>—</code>,浏览器会渲染为 em dash“—”。也可以使用 <code>—</code> 或 <code>—</code>。
为什么页面直接显示 —,没有变成长破折号?
常见原因是代码位于源码展示区域、被模板重复转义,或写成了缺少分号的形式。先查看最终 HTML,再区分“要显示字符”还是“要展示源码”。
— 和 – 有什么区别?
<code>—</code> 显示为“—”,通常用于句中插入或转折;<code>–</code> 显示为“–”,通常用于数字、日期或范围。
title 属性里可以写 — 吗?
可以。<code>title="A—B"</code> 的实际属性值是 A—B。如果你要在文章中展示这段源码,展示层应把和号写成 <code>&</code>。
可以直接把“—”复制到 HTML 里吗?
可以,前提是文件和响应内容使用 UTF-8。若要便于代码审查、模板传输或统一编码,也可以使用 <code>—</code>。
数字写法和命名写法显示效果一样吗?
对于 em dash,<code>—</code>、<code>—</code> 和 <code>—</code> 都对应 U+2014,正常解析时显示相同。
