10

在我看来,Markdown 的更大目标之一是防止用户直接输入可能格式不正确的 HTML。

好吧,这在 MarkdownSharp 中并不完全适合我。

当您在“abc”之后立即有额外的换行符时,此示例可以正常工作...... 在此处输入图像描述

但是当那个换行符不存在时,我认为它仍然应该是 HtmlEncoded,但这不会发生在这里...... 在此处输入图像描述

在幕后,渲染的标记来自 iframe。这是它背后的代码......

<% 
var md = new MarkdownSharp.Markdown();
%>
<%= md.Transform(Request.Form[0]) %>

当然,我一定是错过了什么。哦,我正在使用 v1.13(撰写本文时的最新版本)。


编辑(这是对 StackOverflow 实现的测试)

美国广播公司

这不应该是红色的
4

3 回答 3

3

对于那些不想使用 Steve Wortham 的定制解决方案的人,我已经向 MarkdownSharp 家伙提交了一个问题和建议的修复:http ://code.google.com/p/markdownsharp/issues/detail?id=43

如果你下载我附加的 Markdown.cs 文件,你会发现一个可以设置的新选项。它将阻止 MarkdownSharp 重新编码代码块中的文本。

只是不要忘记在将输入传递到降价之前而不是之后对输入进行 HTML 编码。

另一种解决方案是像 Stack Overflow 那样将 HTML 标签列入白名单。您将在将内容传递给降价后执行此操作。

有关更多信息,请参见:http ://www.CodeTunnel.com/blog/post/24/mardownsharp-and-encoded-html

于 2011-03-17T20:19:48.350 回答
2

由于很明显 StackOverflow 实现包含相当多的自定义项,这些自定义项可能需要花费大量时间来测试和弄清楚,所以我决定转向另一个方向。

我创建了自己的简化标记语言,它是 Markdown 的子集。开源项目位于http://ultralight.codeplex.com/ ,您可以在http://www.bucketsoft.com/ultralight/看到一个工作示例

该项目是一个带有 Javascript 编辑器的完整 ASP.NET MVC 解决方案。而且与 MarkdownSharp 不同,它保证了安全的 HTML。Javascript 解析器用于客户端和服务器端以保证一致的标记(特别感谢侏罗纪 Javascript 编译器)。只需要为该解析器维护一个代码库是一件很美好的事情。

尽管该项目仍处于测试阶段,但我已经在我自己的网站上使用它,并且到目前为止它似乎运行良好。

于 2011-02-16T21:04:44.880 回答
1

可能我没看懂?如果你在 Markdown 中开始一个新的代码块,在它的所有变体中,你确实需要一个换行符和四个空格缩进——在我必须提供的任何渲染器中,一个换行符都行不通。

abc -- Here comes a code block:

    <div style="background-color: red"> This is code</div>

产生:

abc -- 这里有一个代码块:

<div style="background-color: red"> This is code</div>

从您所说的看来,MarkdownSharp 似乎在这条规则上做得很好,所以只有一个换行符(但缩进):

 abc -- Here comes a code block:
     <div style="background-color: red"> This should be code</div>

我们得到一团糟而不是代码块:

abc -- 这里有一个代码块:这应该是代码

我认为 StackOverflow 正在剥离<div>标签,因为他们认为评论不应该有分裂之类的东西。(?)(一般来说,他们必须做很多其他的处理,不是吗,例如获得语法高亮等等?)

编辑: 我认为人们期望 Markdown 实现是错误的。例如,正如我在下面所说的,没有 'invalid markdown' 这样的东西。它不是一种编程语言或类似的语言。我已经验证了我从命令行中获得的所有三个 Markdown 实现都可以无差别地“转换”随机 .js 和 .c 文件,或者那些插入到其他合理的 markdown 文件中 - 并且还插入了 zip 文件和其他废话 - 到有效的 html 中浏览器根本不介意显示——尽管它是鸡划痕。如果你想排除某些东西,例如在一个 wiki 程序中,你当然可以做一些进一步的事情,就像大多数使用 markdown 的 wiki 程序所做的那样。

于 2011-02-01T20:29:42.983 回答