如何在 PHP Markdown 中将单个换行符视为真正的换行符?
Posted
技术标签:
【中文标题】如何在 PHP Markdown 中将单个换行符视为真正的换行符?【英文标题】:How to treat single newline as real line break in PHP Markdown? 【发布时间】:2011-01-06 18:28:54 【问题描述】:我正在阅读http://github.github.com/github-flavored-markdown/
我想在 php Markdown 中实现“换行修改”:
我能想到的最好的是:
$my_html = Markdown($my_text);
$my_html = preg_replace("/\n1/", "<br/>", $my_html);
但这运行起来非常出乎意料。
【问题讨论】:
How to remove line breaks (no characters!) from the string?的可能重复 【参考方案1】:作为一个临时脚本,您可以在运行降价脚本之前在您的字符串上运行它
$text = preg_replace_callback("/^[\w\<][^\n]*\n+/msU",function($x)
$x = $x[0];
$x = preg_match("/\n2/",$x,$match)? $x: trim($x)." \r\n";
return $x;
,$text);
$my_html = Markdown($text);
基于github flavored markdown
text.gsub!(/^[\w\<][^\n]*\n+/) do |x|
x =~ /\n2/ ? x : (x.strip!; x << " \n")
end
附:我不是最擅长正则表达式,而且我不知道 github 使用什么编程语言,所以我即兴发挥
【讨论】:
【参考方案2】:在您的降价文件中查找行:
function doHardBreaks($text)
并将其下方的 preg 模式更改为:
return preg_replace_callback('/ 2,\n/', array(&$this, '_doHardBreaks_callback'), $text);
到:
return preg_replace_callback('/ 2,\n|\n1/', array(&$this, '_doHardBreaks_callback'), $text);
或者你可以扩展 markdown 类,重新声明 'doHardBreaks' 函数,并将返回值更改为类似于上面的代码
问候,艾哈迈德
【讨论】:
【参考方案3】:我想出了以下解决方案,模仿 gfm 换行行为的大部分。它通过了原始帖子中提到的页面上的所有相关测试。请注意,下面的代码会预处理 markdown 并输出有味道的 markdown。
preg_replace('/(?<!\n)\n(?![\n\*\#\-])/', " \n", $content);
【讨论】:
【参考方案4】:PHP 的 nl2br -function 没有删减它?
nl2br — 在字符串中的所有换行符之前插入 HTML 换行符
http://php.net/manual/en/function.nl2br.php
如果您还想删除所有换行符(nl2br 插入 ),您可以这样做:
str_replace('\n', '', nl2br($my_html));
如果不是,请详细说明您的解决方案是如何失败的,以及您想要解决的问题。
【讨论】:
nl2br 或我的 preg_replace 往往会添加太多换行符,例如。段外以上是关于如何在 PHP Markdown 中将单个换行符视为真正的换行符?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 PHP 中将单个附加参数传递给 array_map 回调?
在 bash 中将 CSV 输出为单个字符串,无需额外安装 [重复]