You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Markdown-it&字符转义异常求助:寻求官方配置级解决方案

解决Markdown-it解析时的二次转义问题

问题重现

使用Markdown-it解析页面中class为markdown的元素内容时,代码块里的<符号最终显示为&lt;,而非预期的<,出现二次转义的异常结果。

问题根源

当前通过div[i].innerHTML获取内容时,浏览器已经将原始Markdown里的<转义成了&lt;;随后Markdown-it的render()方法会对内容中的&进行转义,把&lt;里的&变成&amp;,最终得到&amp;lt;,渲染到页面就显示为&lt;。

最优解决方案(无需手动替换)

不需要用replaceAll的临时方案,只需要修改获取内容的方式,从innerHTML改为textContent,直接获取元素的原始文本内容,避免浏览器提前转义:

window.onload = function() {
  var mdit = window.markdownit();

  mdit.set({
    highlight: function (str, lang) {
      if (lang && hljs.getLanguage(lang)) {
        try {
          var code = '<pre class="hljs"><code>'
            + hljs.highlight(lang, str, true).value
            + '</code></pre>';
          return code;
        } catch (__) {}
      }
    }
  });

  var divs = document.getElementsByClassName('markdown');
  for(var i = 0; i < divs.length; i++) {
    // 改用textContent获取原始未转义的Markdown内容
    var content = divs[i].textContent;
    divs[i].innerHTML = mdit.render(content);
  }
}

补充说明

如果你的Markdown内容中混合了需要保留的HTML标签,textContent可能会丢失标签结构,这时可以将Markdown内容放在<textarea>中,或者使用data-*属性存储原始内容,确保能获取到未被浏览器转义的原始文本。

内容的提问来源于stack exchange,提问作者dudung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 05:05:14