【问题标题】:Pagedown and Angle Brackets not CooperatingPagedown 和尖括号不配合
【发布时间】:2016-01-09 21:31:08
【问题描述】:

我正在尝试使用Pagedown 将markdown(包含代码部分)解析为html。

它大部分都有效,但我注意到一种奇怪的行为。如果我的降价中有这个:

`ArrayList<String> names = new ArrayList<>();`

显示的文本最终是这样的:

ArrayList<string> names = new ArrayList&lt;&gt;();

请注意,第一个 String 是小写的,第二个 &lt;&gt; 被转换为 html 实体,由于它们最终位于代码块中,因此无法正确显示。

如果我查看 Pagedown“认为”它应该处理的降价,它会变得陌生:

`ArrayList<string> names = new ArrayList&lt;&gt;();`</string>

显然,它将代码文本的 &lt;String&gt; 部分视为 html 标记,并添加结束 &lt;/string&gt; 标记。解析该降价会产生这个 html:

<code>ArrayList&lt;string&gt; names = new ArrayList&amp;lt;&amp;gt;();</code>

如果我提前对尖括号进行编码:

`ArrayList&lt;String&gt; names = new ArrayList&lt;&gt;();`

然后 Pagedown 只是将 html 实体编码为代码的一部分,这正是我希望它用尖括号做的事情:

 <code>ArrayList&amp;lt;String&amp;gt; names = new ArrayList&amp;lt;&amp;gt;();</code>

我只是希望能够将 markdown(包含代码部分)放入 Pagedown 解析器并让它输出经过净化的 html。这是我目前正在做的事情:

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="Markdown.Converter.js"></script>
<script type="text/javascript" src="Markdown.Sanitizer.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script>
    function parseMarkdown(){

        var markdown = $("#markdown").html();        

        console.log("markdown: " + markdown);

        var converter =  new Markdown.getSanitizingConverter();
            var html = converter.makeHtml(markdown);

            console.log("html: " + html);

            $("#markdown").html(html);
    }
    $(parseMarkdown);
</script>
</head>
<body onload="parseMarkdown">
<div id="markdown">
`ArrayList<String> names = new ArrayList<>();`
</div>

</body>

</html>

在现实生活中,markdown 要么来自数据库(使用 Pagedown 编辑器编写),要么来自 Markdown 文件(使用基本文本编辑器编写)。我错过了一个额外的步骤吗?上述方法是否存在在 Markdown 解析之前运行不良 JavaScript 的风险?

【问题讨论】:

    标签: javascript jquery html markdown pagedown


    【解决方案1】:

    问题与 Markdown 或 Pagedown 无关。

    当您将内容放入 HTML 文档时,HTML 解析器(浏览器...)“纠正”无效的 HTML 片段。在您的情况下,它会自动添加一个结束标记以使 HTML 格式正确。作为解析过程的一部分,它显然还将“String”转换为小写“string”。

    正如您所描述的,Markdown 代码可能应该来自不同的来源(JSON、包含在脚本元素中的外部资源等),您根本不会遇到这个问题。

    【讨论】:

    • 在现实生活中,我使用 JSTL 将 markdown(来自数据库或文件)包含到页面的 html 中,然后我使用上述方法对其进行解析。这不是我应该做的吗?
    • @KevinWorkman 老实说,我不知道 JSTL 是什么,但是每当您将“类似 HTML”的内容直接放在 HTML 中时(这意味着 看起来 像 HTML 的任何内容 - 标记例如),解析器不会保持原样。
    • JSTL 正是在服务器端构建 html 的内容。您能否详细说明“包含在脚本元素中的外部资源”的含义?
    • @KevinWorkman 你可以使用&lt;script id="myResource" type="text/myprivatetype" src="myResource.ext"&gt;&lt;\script&gt; 来加载你想要的任何东西。有很多这种模板用法的例子。环顾四周……
    猜你喜欢
    • 1970-01-01
    • 2010-11-05
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 2015-12-23
    相关资源
    最近更新 更多