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

本文关键字:Url 字符 转换 包含 下划线 MarkdownSharp | 更新日期: 2023-09-27 18:15:51

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

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

此处调用其他子节点的顺序是必要的。链接和图像的替换需要在EscapeSpecialChars()之前进行,以便a和img标记中的任何*'s或_'s都被编码。

    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中处理单个下划线实例,只要一对下划线出现在url中,它就会中断。

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

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; }

有关背景信息,请参见第1点。在https://blog.stackoverflow.com/2008/06/three-markdown-gotcha/.

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

见:http://daringfireball.net/projects/markdown/syntax反斜杠

摘自文章:

例如,如果你想用星号(而不是HTML 标记),则可以在星号前使用反斜杠,如下所示:

'*literal asterisks'*

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


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

听起来好像这个功能考虑得不够周到。它附带了一个警告,说它会使系统做一些不符合标准markdown的事情,在我看来,这似乎是一个警告,他们没有解决这些功能的所有问题。您可能需要更改库来修复诸如此类的错误…