MarkdownSharp正在转换包含下划线字符的Url

时间:2011-11-28 10:59:31

标签: c# .net markdown wmd markdownsharp

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

我看过google但是找不到任何对此问题行为的引用,并且通过阅读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中处理单个下划线实例时,一对下划线出现在网址中,它会断开。

2 个答案:

答案 0 :(得分: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; }

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

答案 1 :(得分:1)

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

请参阅:http://daringfireball.net/projects/markdown/syntax#backslash

来自文章:

  

例如,如果您想用文字星号(而不是HTML&lt; em&gt;标记)包围一个单词,则可以在星号前使用反斜杠,如下所示:

\*literal asterisks\*

Markdown中的星号与下划线大致相同。


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

  

听起来这个功能没有经过充分考虑。它附带一个警告说它将使系统做不符合标准降价的事情,在我看来,这似乎是一个警告,他们没有解决这些功能的每个问题。您可能需要更改库以修复类似的错误...