我在我的一个项目中使用了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中处理单个下划线实例时,一对下划线出现在网址中,它会断开。
答案 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链接语法的链接。
听起来这个功能没有经过充分考虑。它附带一个警告说它将使系统做不符合标准降价的事情,在我看来,这似乎是一个警告,他们没有解决这些功能的每个问题。您可能需要更改库以修复类似的错误...