` 中的 `
` 被浏览器 HTML 解析器消费,textContent 在节点标签中间断行
**原因**:浏览器先于 mermaid 解析 HTML,`
` 变成 DOM 元素
**修复**:使用 ` ```mermaid ` 代码围栏(kramdown 保留原始文本)
```markdown
` ` `mermaid
flowchart LR
A[第一行
第二行] --> B
` ` `
```
### Bug 4:`div.textContent = src` 破坏 entityDecode
**现象**:代码围栏图表初次渲染无法显示
**原因**:`textContent` 赋值导致 innerHTML 中 `
` 变为 `<br>`。mermaid 的 entityDecode 内部用临时 div 的 innerHTML 解码实体时,`
` 被解析为真实 HTML 元素,然后被 textContent 吞掉
**修复**:使用 srcToInnerHTML() 转换——先转义所有 HTML 字符,再将 `<br>` 恢复为真实 `
` 标签
### Bug 5:主题切换后 mermaid 图表损坏
**现象**:切换深色/浅色模式后图表无法重新渲染
**原因**:rerenderMermaid 中用 `el.innerHTML = src` 直接设置原始文本,`
` 和 `>` 被当作 HTML 解析
**修复**:rerenderMermaid 也必须使用 srcToInnerHTML() 转换
### Bug 6:初始化时 mermaid 不根据当前主题渲染
**现象**:浅色模式下 mermaid 图显示为深色背景
**原因**:`` 中 mermaid.initialize() 硬编码了 `theme: 'dark'`
**修复**:读取 `data-theme` 属性动态选择主题变量
### Bug 7:subgraph 标题含特殊字符
**现象**:`subgraph 内部框架` 报错
**修复**:用引号包裹 `subgraph FW["内部框架"]`
### Bug 8:edge label 含引号或特殊字符
**现象**:`-->|含"引号"的文本|` 报错
**修复**:整个 edge label 加引号 `-->|"含引号的文本"|`
---
## 检查流程
### Step 1:扫描
```bash
grep -rn '```mermaid' --include="*.md" . | grep -v ".claude/"
```
如仍有 `
`,先转为代码围栏。
### Step 2:模式匹配检测
对每个 mermaid block 检查:
| 问题 | 检测 | 修复 |
|------|------|------|
| 使用 `
` | grep | 转为代码围栏 |
| `\n` 在节点标签中 | `\\n` 在方括号/花括号内 | → `
` |
| Unicode 箭头 `→` `←` | 正则 | → ASCII 文本 |
| `×` 乘号 (U+00D7) | 正则 `×` | → ASCII `x` |
| 其他 Unicode 符号 | 非 CJK 非 ASCII 字符 | 替换或用引号包裹 |
| subgraph 标题无引号 | `subgraph \w+ [` 后无引号 | 加引号 |
| 嵌套引号 | `"` 在已有引号标签内 | 移除或转义 |
### Step 3:验证
有 mmdc 就用 mmdc 验证,没有则依赖模式匹配。
---
## 节点标签换行正确写法
```mermaid
flowchart LR
A[第一行
第二行] --> B[单行]
C["含特殊字符
如括号()"] --> D{判断}
```
规则:
- 用 `
` 或 `
` 换行
- 不要用 `\n`
- 含 `(){}[]#&` 等特殊字符时用双引号包裹整个标签
- edge label 中含特殊字符也用引号:`-->|"文本"|`