html中下划线和空格需用实体代码或css控制: 防空格合并,_或_显示下划线;、&必须转义,否则被解析为标签引发错乱或xss风险。

HTML里怎么输下划线和空格这类“看不见的字符”
直接用键盘敲 _ 或空格,浏览器会按默认规则合并、忽略——这不是 bug,是 HTML 的渲染机制决定的。想让它们原样显示,得用实体代码或 CSS 控制。
-
替代普通空格,能防止被合并,比如写“姓名 :张三”可保留两个空格 -
_或_是下划线_的实体,适合在纯文本上下文中避免被解析为格式标记(比如 Markdown 混用时) - 连续多个
会撑开宽度,但语义上它代表“不换行空格”,不是排版工具——真要对齐,该用 CSS 的margin或padding
哪些符号必须用实体,哪些可以直接打
字母、数字、中文基本都可直输;但 、<code>>、& 这三个必须转义,否则会被当成标签或属性分隔符,导致页面错乱甚至 XSS 风险。
- 直接输
→ 浏览器以为是标签开始,可能截断后续内容,错误信息常是 <code>Unexpected token " - 正确写法是
<、>、&—— 注意&本身也要先转义,所以&才能显示成一个& - 版权符
©、注册符®等可用实体(©、®),也可直接粘贴 Unicode 字符,现代浏览器都支持,但需确保文件编码为 UTF-8
用 pre 标签还是用 white-space CSS?
当整块内容含大量空格、缩进、换行,且需要原样保留时,别硬塞一堆 和 ,那既难读又难维护。
-
<pre class="brush:php;toolbar:false;"></pre>会保留所有空白和换行,但自带等宽字体和上下外边距,语义上表示“预格式化文本”,适合代码片段、日志输出 - CSS 的
white-space: pre-wrap更灵活:保留空格换行,又能自动换行、继承父级字体,适合地址、诗歌、协议条款等场景 - 千万别用
white-space: pre做长文本容器——它不换行,容易撑破容器,移动端尤其危险
容易被忽略的编码和传输细节
实体代码生效的前提是 HTML 文件本身编码正确,且 HTTP 响应头没覆盖它。很多“实体不显示”的问题,其实卡在这一步。
立即学习“前端免费学习笔记(深入)”;
- 文件开头要有
<meta charset="UTF-8">,且保存时选 UTF-8 无 BOM 格式(编辑器如 VS Code 默认就是) - 如果后端用 Node.js 或 Python 输出 HTML,记得设响应头
Content-Type: text/html; charset=utf-8,否则浏览器可能按 ISO-8859-1 解析,导致©变成乱码 - 服务端模板(如 Jinja2、EJS)常自动转义
<code>>,但不会动_或空格——这时候再手动加就多余了,反而造成双重空格











