我在我的一个项目中使用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有一个配置选项,就是为了这个原因而创建的:
/// <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的事情,在我看来,这似乎是一个警告,他们没有解决这些功能的所有问题。您可能需要更改库来修复诸如此类的错误…