使用php关闭标记后添加换行符或换行符

时间:2016-01-29 15:03:41

标签: php regex

我在MySql数据库中有这个文本:

0

我添加了p标签并且有效:

First paragraph very long.
Second paragraph very long.
Third paragraph.

当我回显到html页面时,我尝试添加换行符。我尝试了3种不同的东西。但它们似乎都不起作用:

$text = preg_replace("/\n/","<p>",$text);
$text = '<p>'.$text;

如果我在Safari浏览器中访问网络检查员,我会得到:

$text = preg_replace("/<\/p>/","</p>\n\n",$text);
$text = preg_replace("/<\/p>/","</p><br><br>",$text);
$text = nl2br($text);
echo $text;

我想有这个:

<p>First paragraph very long.</p><p>Second paragraph very long.</p><p>Third paragraph.</p>

即使我逃避它,我的正则表达式似乎也没有选择<p>First paragraph very long.</p>\n>\n <p>Second paragraph very long.</p>\n>\n <p>Third paragraph.</p>\n>\n 。我不明白。有什么问题?

2 个答案:

答案 0 :(得分:2)

假设你需要换行控制字符(而不是html换行标记):

<?php


namespace Drupal\dino_roar\Jurrasic;

class RoarGenerator
{
    public function getRoar($length)
    {
        return 'R' . str_repeat('O', $length) . 'AAARRR';
    }
}

注意$text = "First paragraph very long.\nSecond paragraph very long.\nThird paragraph."; $text = '<p>' . preg_replace("~\n~", "<p>\n\n</p>", trim($text)) . '</p>; 用于你有前导或尾随换行符,trim用作分隔符,因为在处理html时~是一个糟糕的选择,导致你逃脱所有在这个地方。

在上面的例子中并不明显,但是以你的一些reqex为例:

/

比阅读更容易:

preg_replace("~</p>~","</p>\n\n",$text);

此外,您不需要正则表达式,您可以使用preg_replace("/<\/p>/","</p>\n\n",$text);

str_replace

甚至爆炸/内爆:

$text = '<p>' .str_replace("\n", "<p>\n\n</p>", trim($text)) . '</p>;

如果是你想要的html换行符,那么你可以将替换参数编辑为:

$text = '<p>' . implode("</p>\n\n<p>", explode("\n", trim($text))) . '</p>';

在上面的任何一个中,但使用一些css可能会更好:

"</p><br><br><p>"

答案 1 :(得分:1)

您不需要正则表达式,简单的str_replace有效(在您的示例中):

$text = str_replace( "</p><p>","</p>\n<p>",$text );