2011-11-28 41 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

相關問題