3

我在我的一个项目中使用 MarkdownSharp 并注意到如果我的任何 Url 在其中的某处包含一对下划线字符,它会被视为斜体,因此将 _ 替换为<em>.

我查看了谷歌,但找不到任何关于此问题行为的参考,并且通过阅读 MarkdownSharp 代码中的一些评论,它表明代码的编写方式是为了防止这种情况发生。请参阅下面的降价代码片段:

此处调用其他潜艇的顺序是必不可少的。链接和图像替换需要在 EscapeSpecialChars() 之前进行,以便对 a 和 img 标签中的任何 * 或 _ 进行编码。

    public string Transform(string text)
    {
        if (String.IsNullOrEmpty(text)) return "";

        Setup();

        text = Normalize(text);

        text = HashHTMLBlocks(text);
        text = StripLinkDefinitions(text);
        text = RunBlockGamut(text);
        text = Unescape(text);

        Cleanup();

        return text + "\n";
    }

这种行为是否有已知的解决方法?

** 更新:我刚刚测试了在 StackOverflow 上输入一个 url,我相信它使用 MarkdownSharp 的一个版本(并且根据我的项目启用了 AutoHyperlink)并且它处理 url 中的单个下划线实例,只要一对下划线出现在网址中,它会中断。

4

2 回答 2

4

MarkdownSharp 有一个为此创建的配置选项:

/// <summary>
/// when true, bold and italic require non-word characters on either side  
/// WARNING: this is a significant deviation from the markdown spec
/// </summary>
public bool StrictBoldItalic { get; set; }

有关一些背景信息,请参阅https://blog.stackoverflow.com/2008/06/three-markdown-gotcha/中的第 1 点。

于 2011-11-30T11:36:29.917 回答
1

您是否尝试过_使用反斜杠转义要保留的字符?

见:http ://daringfireball.net/projects/markdown/syntax#backslash

来自文章:

例如,如果你想用文字星号(而不是 HTML <em> 标签)包围一个单词,你可以在星号之前使用反斜杠,如下所示:

\*literal asterisks\*

Markdown 中的星号或多或少与下划线相同。


编辑:由于我发表的评论,答案被接受了。OP 决定禁用自动超链接并使用 HTML 标记或 Markdown 链接语法手动插入链接。

听起来这个功能没有被考虑得足够好。它带有一个警告,说它将使系统执行不符合标准降价的事情,在我看来,这似乎是一个警告,他们并没有解决这些功能的所有问题。您可能需要更改库以修复此类错误...

于 2011-11-28T11:16:25.500 回答