我正在尝试使用Pagedown将markdown(包含代码部分)解析为html。
它主要起作用,但我注意到一种奇怪的行为。如果我在降价中有这个:
`ArrayList<String> names = new ArrayList<>();`
显示的文字最终为:
ArrayList<string> names = new ArrayList<>();
请注意,第一个String
是低级的,第二个<>
被转换为html实体,由于它们最终位于代码块内,因此未正确显示。
如果我看一下Pagedown“认为”它应该处理的降价,那就更奇怪了:
`ArrayList<string> names = new ArrayList<>();`</string>
显然,它将代码文本的<String>
部分视为html标记,并添加了结束</string>
标记。解析markdown会产生这个html:
<code>ArrayList<string> names = new ArrayList&lt;&gt;();</code>
如果我提前编码尖括号:
`ArrayList<String> names = new ArrayList<>();`
然后Pagedown只是将html实体编码为代码的一部分,这正是我想要它用尖括号做的:
<code>ArrayList&lt;String&gt; names = new ArrayList&lt;&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>
在现实生活中,降价来自数据库(使用Pagedown编辑器编写)或来自markdown文件(使用基本文本编辑器编写)。我缺少一个额外的步骤吗?在Markdown解析之前,上述方法是否存在运行错误JavaScript的风险?
答案 0 :(得分:1)
问题与Markdown或Pagedown无关。
当您将内容放入HTML文档时,HTML解析器(浏览器...)会“纠正”无效的HTML片段。在您的情况下,它会自动添加一个结束标记以使HTML格式良好。它显然也将“String”转换为小写“string”,作为其解析过程的一部分。
正如您所描述的那样,Markdown代码可能来自不同的来源(JSON,包含在脚本元素中的外部资源等等),您根本不会遇到此问题。