Как рассматривать одну новую строку как реальный разрыв строки в PHP Markdown?
Я читал http://github.github.com/github-flavored-markdown/
Я хотел бы реализовать эту "модификацию новой строки" в PHP Markdown:
Лучшее, что я мог придумать, это:
$my_html = Markdown($my_text);
$my_html = preg_replace("/\n{1}/", "<br/>", $my_html);
Но это происходит очень неожиданно.
4 answers
Найдите строку в своем файле уценки:
function doHardBreaks($text) {
И измените шаблон preg под ним с:
return preg_replace_callback('/ {2,}\n/', array(&$this, '_doHardBreaks_callback'), $text);
Кому:
return preg_replace_callback('/ {2,}\n|\n{1}/', array(&$this, '_doHardBreaks_callback'), $text);
Или вы можете просто расширить класс markdown, повторно объявить функцию "Dohardbreaks" и изменить возврат на что-то вроде кода выше
С уважением, Ахмад
В качестве специального сценария вы можете просто запустить это в своей строке перед запуском сценария уценки
$text = preg_replace_callback("/^[\w\<][^\n]*\n+/msU",function($x){
$x = $x[0];
$x = preg_match("/\n{2}/",$x,$match)? $x: trim($x)." \r\n";
return $x;
},$text);
$my_html = Markdown($text);
На основе уценки со вкусом github
text.gsub!(/^[\w\<][^\n]*\n+/) do |x|
x =~ /\n{2}/ ? x : (x.strip!; x << " \n")
end
P.S. Я не лучший в регулярных выражениях и не знаю, какой язык программирования использует github, поэтому я импровизировал
Nl2br-функция PHP не сокращает ее?
nl2br - Вставляет разрывы строк HTML перед всеми новыми строками в строке
Http://php.net/manual/en/function.nl2br.php
Если вы также хотите удалить все разрывы строк (вставки nl2br
), вы можете сделать:
str_replace('\n', '', nl2br($my_html));
Если нет, пожалуйста, подробно расскажите о том, как ваше решение не работает, и что вы хотели бы исправить.
Я придумал следующее решение, имитирующее большинство частей поведения новой строки gfm. Он проходит все соответствующие тесты на странице, упомянутой в оригинальном сообщении. Пожалуйста, обратите внимание, что приведенный ниже код предварительно обрабатывает уценку и выводит ароматизированную уценку.
preg_replace('/(?<!\n)\n(?![\n\*\#\-])/', " \n", $content);