MarkdownSharp конвертирует URL, содержащие символы подчеркивания - PullRequest
3 голосов
/ 28 ноября 2011

Я использую 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";
    }

Есть ли известный обходной путь для такого поведения?

** ОБНОВЛЕНИЕ: Я только что проверил ввод URL-адреса в StackOverflow, который, как я считаю, использует версию MarkdownSharp (и AutoHyperlink включена в соответствии с моим проектом) и обрабатывает один экземпляр подчеркивания в URL-адресе, так каккак только в ссылке появляется пара символов подчеркивания, она ломается.

Ответы [ 2 ]

4 голосов
/ 30 ноября 2011

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. в http://blog.stackoverflow.com/2008/06/three-markdown-gotcha/.

1 голос
/ 28 ноября 2011

Вы пытались экранировать символы _, которые хотите сохранить, используя обратную косую черту?

См .: http://daringfireball.net/projects/markdown/syntax#backslash

Из статьи:

Например, если вы хотите заключить слово в буквальные звездочки (вместо тега HTML ), вы можете использовать обратную косую черту перед звездочками, например:

\*literal asterisks\*

Звездочкив Markdown более или менее совпадают с подчеркиванием.


Редактировать: Ответ был принят из-за этого комментария, который я сделал.ОП решил отключить автоматические гиперссылки и вручную вставить ссылки с разметкой HTML или синтаксисом ссылок Markdown.

Похоже, эта функция не была продумана до конца.Он поставляется с предупреждением о том, что система будет делать то, что не соответствует стандартной уценке, что мне кажется предупреждением о том, что они не решили все проблемы с этими функциями.Возможно, вам придется изменить библиотеку, чтобы исправить подобные ошибки ...

...