如何在 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 输出为单个字符串,无需额外安装 [重复]

如何在 Yii2 mpdf 中将 <br> 标签实际呈现为换行符

markdown 在PHP中将字符串转换为十六进制

如何在路由器上注册单个视图(不是视图集)?

PHP 在论文中将ShareThis按钮添加到单个帖子* *