dom树构建从字节流开始,而非字符串;浏览器先解码字节流为字符,再分词生成token,最后构建节点并形成树结构。

DOM树构建从字节流开始,不是从字符串开始
浏览器拿到的原始数据是字节流(bytes),不是你复制粘贴的字符串。编码识别错误、BOM头残留、传输截断,都会让后续所有步骤失效。比如 UTF-8 编码下误用 GBK 解析,<div> 可能变成乱码 token,解析器直接放弃建树。
<p>实操建议:</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill9263" title="Html2md"><img
src="https://img.php.cn/upload/skill/000/000/081/179249945220127.jpg" alt="Html2md" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill9263" title="Html2md" class="overflowclass">Html2md</a>
<p class="overflowclass">使用 Readability + Turndown 将 HTML 页面转换为干净的、Agent 友好的 Markdown。去除导航栏、广告、页脚、Cookie 横幅、社交按钮等干扰元素。支持 URL...</p>
</div>
<a rel="nofollow" href="/xiazai/skill9263" title="Html2md" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>
<ul>
<li>用 <code>curl -sI URL 检查响应头 Content-Type 是否含 text/html; charset=utf-8,缺 charset 或值错误会触发默认编码(通常是 ISO-8859-1)
curl -s URL | hexdump -C | head 看前几个字节:EF BB BF 是 UTF-8 BOM,若源码没写 BOM 却出现,说明中间代理加了头response.setCharacterEncoding("UTF-8")(Java)或设置 Content-Type: text/html; charset=utf-8(Node.js/Python)tokenization 阶段出错,DOM树就永远建不起来
HTML 解析器第一步是把字节转字符,再切分成 token(如 startTag、endTag、character)。一旦 tokenizer 卡住——比如遇到 <script>alert(</script> 后面突然断网,或










