2011-11-28 65 views
3

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

我已经看过谷歌,但找不到对此问题行为的任何引用,并且从阅读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上输入一个我认为使用MarkdownSharp版本的URL(并且根据我的项目启用了AutoHyperlink),并且尽管它在URL内处理单个下划线实例,一对下划线出现在网址中,它打破了。

+0

什么是WMD?该标签已被使用很少,不包含任何描述。在你的问题中,我也没有看到任何可以被WMD缩写的东西。 –

+0

@ MerlynMorgan-Graham:它必须参考这个编辑器:http://code.google。com/p/wmd/ –

+0

是的,根据Ben P的评论,它指的是MarkdownSharp与MarkdownSharp结合使用的降价编辑器。也许我不应该分配该标签,因为在这种情况下它只是松散相关的。 – marcusstarnes

回答

1

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

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

从文章:

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

\*literal asterisks\* 

星号在降价或多或少与下划线相同。


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

听起来像那个功能没有被认为是好的。它带有一个警告,表示它会使系统执行不符合标准降价的事情,这在我看来似乎是一个警告,即他们没有解决这些功能的所有问题。您可能需要更改库修复bug这样的...

+0

我试过,但如果我启用AutoHyperlinks(我正在使用),它会在转义下划线之前立即关闭锚点标记,所以链接基本上被打破。 – marcusstarnes

+0

@marcusstarnes:听起来像那个功能没有被很好地思考。它带有一个警告,表示它会使系统执行不符合标准降价的事情,这在我看来似乎是一个警告,即他们没有解决这些功能的所有问题。您可能需要更改库来修复这样的错误... –

+0

@marcusstarnes:另外,如果您的问题是*超链接*,MD应该保持手动标记不变。你尝试过手动插入锚标签吗? –

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/

+0

谢谢,这对于服务器端MarkdownSharp方面非常有用。唯一的问题是,它看起来并不像'StrictBoldItalic'是'Pagedown'(javascript markdown工具)中的一个配置选项,所以在客户端显示的内容不是什么然后由Markdown Sharp提供:( – marcusstarnes

+1

@ marcusstarnes:实际上这是PageDown中的* only *选项 - 你甚至没有选择* not *与StrictBoldItalic一起使用(在Stack Overflow中,'StrictBoldItalic'属实,我们的PageDown与在开源的回购协议中,所以两者必须匹配) – balpha

+0

谢谢,它看起来像我没有原始的Pagedown代码,因为它不是那样的行为,我现在再次下载了Pagedown代码,它工作正常就像你说的那样,在我的项目和堆栈溢出中,仍然有一两个场景,URL中的下划线会断开,但它是一个'不太可能'的真实场景,所以我不担心它(例如http ://mysite.com/_test_/将会出现呃'测试'在URL中的斜体,删除下划线,而http://mysite.com/_test_2/将工作)。感谢帮助balpha。 – marcusstarnes