如何使用.Net(C#)将原始HTML转换为Markdown,服务器端?

时间:2015-04-28 10:02:32

标签: c# .net markdown

我需要从第三方获取大量原始HTML代码,这些代码可能包含任意数量的标记/属性以及可能有脏或有害的代码,然后将其剥离并将其转换为干净,安全的Markdown代码。

'Markdownifier',如果你愿意,就像heckyesmarkdown.com那样,但是来自我的服务器端.Net(C#)应用程序,而不是客户端。我很乐意使用第三方库(免费或付费)来执行此操作,但出于性能,安全性和可靠性原因,不使用第三方托管的REST API或类似文件。

有很多可用于.Net的库,它允许你将Markdown转换为HTML,但是我需要反过来,似乎找不到已经解决了这个问题的.Net工具(除非我是有点昏暗,看错了地方!)。

2 个答案:

答案 0 :(得分:3)

我在GitHub上找到了这个库:

https://github.com/baynezy/Html2Markdown

看起来很有希望解决你的问题!我自己还没试过。

您需要构建项目并在代码中包含dll,因为我找不到NuGet包。

用法如下(html变量是一个字符串):

 var markdown = new Converter().Convert(html);

答案 1 :(得分:3)

您可以尝试Pandoc(http://pandoc.org/)。对于Windows,它是一个命令行工具,但它工作得很好。这是我之前接口的方式......

private const string processName = @"c:\program files (x86)\pandoc\pandoc.exe";
private const string args = @"-t markdown -r html5 -o ""{0}"" ""{1}""";

public void Convert(Stream inputStream, Stream outputStream)
{
    var process = new Process();

    var inputFilename = Path.GetTempFileName();
    var outputFilename = Path.GetTempFileName();

    using (var fileStream = File.Create(inputFilename))
    {
        inputStream.CopyTo(fileStream);
    }

    ProcessStartInfo psi = new ProcessStartInfo(processName, string.Format(args, outputFilename, inputFilename))
    {
        RedirectStandardOutput = true,
        RedirectStandardInput = true,
        UseShellExecute = false
    };

    process.StartInfo = psi;
    process.Start();
    process.WaitForExit();

    var bytes = File.ReadAllBytes(outputFilename);
    outputStream.Write(bytes, 0, bytes.Length);
}

修改

应该注意的是,之前我还没有用它来转换markdown,但我已经用它来转换HTML格式的其他格式,并且它做了相当合理的工作而且它不仅仅是爆炸,如果它不能像别人那样做。我使用的论据来自http://pandoc.org/README.html,尤其是:

pandoc -f html -t markdown http://www.fsf.org