如何在 PHP Markdown 中将单个换行符视为真正的换行符?

发布于 2024-08-18 04:44:55 字数 341 浏览 8 评论 0原文

我正在阅读 http://github.github.com/github-flavored-markdown/

我想在 PHP Markdown 中实现“换行符修改”:

我能想到的最好的是:

$my_html = Markdown($my_text);
$my_html = preg_replace("/\n{1}/", "<br/>", $my_html);

但这运行起来非常不可预期。

I was reading http://github.github.com/github-flavored-markdown/

I would like to implement that "Newline modification" in PHP Markdown:

Best I could think of is:

$my_html = Markdown($my_text);
$my_html = preg_replace("/\n{1}/", "<br/>", $my_html);

But this runs very unexpectable.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

情感失落者 2024-08-25 04:44:55

在 markdown 文件中查找行:

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”函数,并将返回更改为类似上面代码的内容

问候,Achmad

Look for line in your markdown file:

function doHardBreaks($text) {

and change the preg pattern below it from:

return preg_replace_callback('/ {2,}\n/', array(&$this, '_doHardBreaks_callback'), $text);

to:

return preg_replace_callback('/ {2,}\n|\n{1}/', array(&$this, '_doHardBreaks_callback'), $text);

Or you can just extend the markdown class, redeclare 'doHardBreaks' function, and change the return into something like code above

Regards, Achmad

冷月断魂刀 2024-08-25 04:44:55

我想出了以下解决方案,模仿 gfm 换行行为的大部分部分。它通过了原始帖子中提到的页面上的所有相关测试。请注意,下面的代码预处理 markdown 并输出风味的 markdown。

preg_replace('/(?<!\n)\n(?![\n\*\#\-])/', "  \n", $content);

I've came up with the following solution, imitating most parts of the gfm newline behavior. It passes all the relevant tests on the page mentioned in the original post. Please note that the code below preprocesses markdown and outputs flavored markdown.

preg_replace('/(?<!\n)\n(?![\n\*\#\-])/', "  \n", $content);
一个人的旅程 2024-08-25 04:44:55

作为临时脚本,您可以在运行

$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);

基于 的 markdown 脚本 之前在字符串上运行此脚本github风格的markdown

text.gsub!(/^[\w\<][^\n]*\n+/) do |x|
    x =~ /\n{2}/ ? x : (x.strip!; x << "  \n")
end

PS我不是最擅长正则表达式,而且我不知道github使用什么编程语言,所以我即兴创作

As an ad-hoc script you can just run this on your string before running the markdown script

$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);

Based on the github flavored markdown

text.gsub!(/^[\w\<][^\n]*\n+/) do |x|
    x =~ /\n{2}/ ? x : (x.strip!; x << "  \n")
end

P.S. I'm not the best at regex and I don't know what programming language github uses so I improvised

橙幽之幻 2024-08-25 04:44:55

PHP 的 nl2br 函数不能解决问题吗?

nl2br — 在字符串中的所有换行符之前插入 HTML 换行符

http ://php.net/manual/en/function.nl2br.php

如果您还想删除所有换行符(nl2br 插入
),您可以这样做:

str_replace('\n', '', nl2br($my_html));

如果没有,请详细说明如何您的解决方案失败了,以及您想要修复什么。

PHP's nl2br -function doesn't cut it?

nl2br — Inserts HTML line breaks before all newlines in a string

http://php.net/manual/en/function.nl2br.php

If you also want to remove all linebreaks (nl2br inserts <br/>), you could do:

str_replace('\n', '', nl2br($my_html));

If not, please elaborate on how your solution fails, and what you'd like to fix.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文