如果向數據庫輸入內容時,沒有用到富文本編輯器。而用的 textarea 標簽的話,那么內容中的換行就會以 '\n' 的形式記錄到數據庫中。再者,如果把內容輸出到瀏覽器中時,瀏覽器不能識別 '\n' 換行符進行換行,會對用戶的閱讀造成一定的影響。雖然php提供了一個很好的解決函數 nl2br() ,但他只能插入一個<br> 標簽,但如果我們想使用 <p></p> 標簽換行的話,可以自定義一個函數 nl2p()

php nl2p() 自定義函數

注意:nl2p(),為一個自定義函數,因為它的功能與 nl2br() 相似,所以很多PHP編程者都喜歡命名為 nl2p()。

函數代碼:

nl2p():將字符串中的換行符'\n',轉換成 <p></p> 標簽

function nl2p($string, $line_breaks = true, $xml = true){
    $string = str_replace(['<p>', '</p>', '<br>', '<br />'], '', trim($string));
    if ($line_breaks == true) {
        return '<p>' . preg_replace(array("/([\n]{2,})/i", "/([^>])\n([^<])/i"), array("</p>\n<p>", '<br' . ($xml == true ? ' /' : '') . '>'), $string) . '</p>';
    } else {
        return '<p>' . preg_replace("/([\n|\r\n])/i", "</p>\n<p>", $string) . '</p>';
    }
}

參數說明:

$string:要處理的字符串

$line_breaks:為 TRUE 時,單行換行將轉換為HTML換行標記<br>或<br/>。

$xml:如果為 true,使用 <br/> (xml語法)標簽,否則使用 <br> (html語法)標簽

php nl2p() 自定義函數使用示例

1、php把一段字符轉換成 <p></p> 換行

代碼:

<?php
$str = "hello \n word!";
echo nl2p($str,false);
?>

運行結果(需要查看源碼):

<p>hello </p>
<p> word!</p>

2、將所有字符串作用一段,并用<br/>換行

代碼

<?php
$str = "飛鳥慕魚博客 \n http://xswdd.cn!";
echo nl2p($str);
?>

瀏覽器輸出樣式:

飛鳥慕魚博客
http://xswdd.cn!

查看源碼:

<p>飛鳥慕魚博客<br />http://xswdd.cn!</p>

3、使用<br>換行

代碼:

<?php
$str = "舉頭望明月, \n 低頭思故鄉!";
echo nl2p($str,true,false);
?>

瀏覽器輸出樣式:

舉頭望明月,
低頭思故鄉!

查看源碼:

<p>舉頭望明月,<br>低頭思故鄉!</p>

4、如果有兩個連續的換行符,則另起一段.

代碼:

<?php
$str = "不敢高聲語, \n\n 恐驚天上人!";
echo nl2p($str,true,false);
?>

瀏覽器輸出:

不敢高聲語,
恐驚天上人!

查看源碼:

<p>不敢高聲語, </p>
<p> 恐驚天上人!</p>