<!-- 请将此提示保持极短,并以 UTF-8(无 BOM)保存;过长注释可能把 <meta charset> 推迟到 1024 字节之后 -->
<!DOCTYPE html>
<html lang="zh-CN" dir="ltr">
<head>
<!-- 关键:字符集声明必须尽量靠前(位于 head 的最前、文档前 1024 字节内),否则会出现“charset 过晚”的提示 -->
<meta charset="UTF-8">
<!-- 移动端视口:让页面按设备宽度渲染,避免默认缩放到桌面宽度 -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 文档标题:每个页面必须且只能有一个 <title>;缺失会被 W3C 校验器报错 -->
<title>简易内容页模板(请修改为你的标题)</title>
<!--
说明与易错点(此段注释位于 charset 之后,不会触发“charset 过晚”问题)
一、文件编码与 BOM
· 强烈建议以 UTF-8 且不带 BOM 保存。若带 BOM,文档开头会出现三个隐藏字节,可能触发:
- “Non-space characters found without seeing a doctype first.”
- “doctype 前有非空字符”
· 检查与移除(任选其一)
- VS Code:状态栏编码指示器 → 另存为编码 → UTF-8(不是 “UTF-8 with BOM”)
- Notepad++:菜单“编码” → 转为 UTF-8(无 BOM)
- Sublime Text:File → Save with Encoding → UTF-8
- Linux / macOS:xxd -g 1 -l 3 index.html 或 hexdump -C -n 3 index.html
若看到 ef bb bf,说明存在 BOM;请去除后再保存
- Windows PowerShell:Format-Hex -Path .\index.html -Count 3
若显示 EF BB BF,同样表示存在 BOM
二、DOCTYPE 与文档开头
· <!DOCTYPE html> 必须是文件第一行第一列;前面不要有空格、换行、统计脚本或任意文本。
· 如果需要放置顶部注释,请保持极短,避免将 <meta charset> 挤到文档前 1024 字节之外。
· 若见到“Stray doctype”“Stray start tag html/head”,通常是中途又输出了一次 doctype 或 html/head 标签。
三、<meta charset> 的位置与数量
· 只能声明一次,并且放在 head 最前面(title、link、style 等都应位于其后)。
· 不要在它之前放置很长注释或外部脚本;否则会触发“charset 过晚”的报错。
四、注释规范
· HTML 注释必须成对闭合;不要写未闭合注释,否则会报 “End of file inside comment”。
· 注释内容中避免出现连续的两个连字符(为避免被解析为特殊标记,这里不直书该序列)。
五、服务器响应头(强烈建议)
· 理想响应头应包含:Content-Type: text/html; charset=UTF-8
· 检查方式
- 浏览器开发者工具 → Network → 选中文档 → Headers
- 命令行:curl -I https://你的域名/路径
六、线上输出与上游注入
· 某些上层模板、CDN、WAF 可能在页面开头插入片段,破坏 DOCTYPE 位置。
· 若线上与本地不一致,请抓取最终输出校验:
- 浏览器开发者工具 → Network → 选中文档 → Response 查看最终 HTML
- 命令行:curl -s https://你的域名/路径 > dump.html;再将 dump.html 送 W3C 校验
-->
<!-- 可选:极简样式(便于阅读),不需要可整体删除;注意 <style> 必须在 <head> 内 -->
<style>
html, body { height: 100%; }
body {
margin: 0; /* 移除默认外边距,避免内容贴边 */
padding: 24px; /* 留出阅读留白 */
line-height: 1.6; /* 提升可读性 */
color: #222; /* 文本颜色 */
background: #fff; /* 背景色 */
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
"Helvetica Neue", Arial, "Noto Sans CJK SC", "Microsoft YaHei",
sans-serif; /* 常见中英文字体栈,跨平台更稳定 */
}
h2 { margin: 0 0 12px; line-height: 1.3; }
p { margin: 0 0 12px; }
ul { margin: 0; padding-left: 1.25em; }
pre, code {
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
"Courier New", monospace; /* 代码等宽字体 */
background: #f6f8fa; /* 代码底色,便于区分 */
color: #24292f; /* 代码文字颜色 */
}
pre { padding: 12px; border-radius: 8px; overflow: auto; }
</style>
</head>
<body>
<!-- 你需要的“简单内容”:仅包含一个 H2 标题、一段说明文字、三条要点 -->
<!-- 下面放代码,下面放代码,下面放代码 -->
这里放我的代码
<!-- 上面放代码,上面放代码,上面放代码 -->
<!-- 说明:以下以实体转义的方式输出,可直接复制为源代码使用 -->
<!--(按你的要求,此处的可见代码示例也不再展示;若后续需要恢复,只需取消下面两行注释并补充转义内容)
<pre><code>…此处是代码模板示例…</code></pre>
-->
<!--
发布前自检步骤与排错方法(确保通过 W3C 校验与线上可访问)
一、校验必过清单(逐项核对)
· [ ] 以 UTF-8(无 BOM)保存文件
· [ ] 第一行是 <!DOCTYPE html> 且其前无任何字符
· [ ] <html lang="zh-CN"> 已设置主语言(可避免“建议添加 lang”警告)
· [ ] <head> 内存在且仅存在一个 <title>
· [ ] <meta charset="UTF-8"> 位于 head 最前且仅声明一次
· [ ] <style> 仅在 <head> 中;<body> 内不要放样式或额外 meta/link/script
二、W3C 校验器常见报错与对策
· Non-space characters before doctype
· 说明 doctype 前面存在字符或 BOM;删除多余字符或去掉 BOM
· A charset attribute on a meta element found after the first 1024 bytes
· 说明 charset 声明过晚;将 <meta charset> 上移到 head 最前,并减少其前内容
· Element head is missing a required instance of child element title
· 说明缺少 <title>;在 head 内添加一个且只一个 <title>
· Element style not allowed as child of element body
· 说明把 <style> 写进了 body;移动到 head 内
· End of file inside comment
· 说明注释未闭合;请补上注释结束标记(不要在注释文字中直书结束标记字面形式)
· A document must not include more than one meta element with a charset attribute
· 说明重复声明了 charset;仅保留第一处
三、如何确认“是不是服务器在我页面前面加了东西”
· 浏览器开发者工具 → Network → 选中文档 → Response 查看最终输出
· 或者:curl -s https://你的域名/路径 > dump.html;将 dump.html 送校验器
· 若发现 doctype 前有内容,检查上游模板、Nginx/Apache 配置、CDN/WAF 注入
四、如何确认响应头正确发送了编码
· curl -I https://你的域名/路径
· 期望看到:Content-Type: text/html; charset=UTF-8
· 若缺少 charset,可在服务端/网关添加默认字符集配置(Nginx/Apache/Express 等)
五、如何查找“不可见空格/控制符”
· Linux:sed -n '1p' index.html | od -An -t x1 (查看首行字节)
· macOS:hexdump -C -n 64 index.html (查看前 64 字节)
· VS Code:启用“呈现空白符”(Render Whitespace)以直观看到异常空格
· 若使用 IDE 模板引擎(PHP/Blade、Twig、Freemarker 等),请确保模板文件也为 UTF-8(无 BOM)
六、复制粘贴注意事项
· 不要把 Markdown 的三反引号围栏、聊天记录、带 @ 的说明行直接粘进 HTML
· 不要把演示日志、箭头符号或非 HTML 片段粘在 doctype 前
· 粘贴文字后再检查是否出现了“智能引号”“全角空格”等不期望字符
七、构建流水线与缓存
· 若使用 CI/CD、构建器或模板引擎,请确保不会在 <meta charset> 之前插入任何额外内容
· 若开启了 CDN/缓存,请清理缓存后再校验;旧缓存可能仍含错误版本
-->
<!-- 结束 body 提示:此处之后不应再输出可见内容;若你在此行下方看到多余字符,多半是模板注入或复制误加 -->
</body>
<!-- 结束 html 提示:此注释位于 </html> 之前、仍在文档结构内;请不要在 </html> 之后再写任何内容,以免出现“页面末尾有多余字符”的问题 -->
</html>