You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Markdown-it与Highlight.js时代码块渲染异常的问题求助

使用Markdown-it与Highlight.js时代码块渲染异常的问题求助

我最近在尝试用Markdown-it和Highlight.js在HTML里渲染Markdown内容,但遇到了两个头疼的问题:

  • 代码块里的<>被自动转义了,这不是我想要的效果;
  • C语言代码里的#include被错误识别成了Markdown的标题格式。

以下是我的代码:

template.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <!-- Required meta tags -->
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

        <link rel="stylesheet" href="css/bootstrap.min.css">
        <link rel="stylesheet" href="/js/styles/dark.min.css" />

        <title>Example Markdown-it</title>
    </head>
    <body>
        <div class="container">

        <div class="markdown">
        ## Example Markdown Content

        Example list:

        *   One

        *   Two

        *   Three

        A code segment:

        ```js
        window.onload = function() {
            var md = window.markdownit();
            var div = document.getElementsByClassName('markdown');
            for (var i = 0; i < div.length; i++) {
                var content = div[i].innerHTML;
                document.getElementsByClassName('markdown')[i].innerHTML = md.render(content);
            }
        }
        ```

        And now a C snippet:

        ```c
        #include <stdio.h>
        #include <other.h>

        int main() {
            printf("hello world!\n");
            int x = 100;
            if (x > 50)
                printf("x is greater than 50\n");
            return 0;
        }
        ```
        </div> <!-- end of markdown content -->

    </div>

    <script src="js/markdown-it.min.js"></script>
    <script src="js/highlight.min.js"></script>

    <script src="js/test.js"></script>
    </body>
</html>

test.js

window.onload = function() {
    
    const md = markdownit({
      highlight: function (str, lang) {
        if (lang && hljs.getLanguage(lang)) {
          try {
            return '<pre><code class="hljs">' +
                   hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +
                   '</code></pre>';
          } catch (__) {}
        }

        return '<pre><code class="hljs">' + md.utils.escapeHtml(str) + '</code></pre>';
      }
    });

    var div = document.getElementsByClassName('markdown');
    for (var i = 0; i < div.length; i++) {
        var content = div[i].innerHTML;
        document.getElementsByClassName('markdown')[i].innerHTML =  md.render(content);
    }
}

现在渲染出来的效果完全不符合预期:
渲染异常的效果

我试过去掉Highlight.js,问题依然存在,看起来应该是Markdown-it的配置有问题?我对JavaScript了解不多,这段代码是参考了Markdown-it官方的语法高亮示例,以及非Node.js环境下的使用教程写的,是不是漏掉了什么配置选项能避免这种情况?

备注:内容来源于stack exchange,提问作者anewb33

火山引擎 最新活动