PHP Conference Japan 2024

nl2br

(PHP 4, PHP 5, PHP 7, PHP 8)

nl2br在字串中所有換行字元前插入 HTML 換行標籤

說明

nl2br(字串 $string, 布林值 $use_xhtml = true): 字串

傳回插入 <br /><br> 在所有換行字元 (\r\n\n\r\n\r) 前的 字串

參數

string (字串)

輸入字串。

use_xhtml

是否使用 XHTML 相容的換行標籤。

傳回值

傳回修改後的字串。

範例

範例 #1 使用 nl2br()

<?php
echo nl2br("foo isn't\n bar");
?>

以上範例會輸出

foo isn't<br />
 bar

範例 #2 使用 use_xhtml 參數產生有效的 HTML 標記

<?php
echo nl2br("Welcome\r\nThis is my HTML document", false);
?>

以上範例會輸出

Welcome<br>
This is my HTML document

範例 #3 各種換行符號

<?php
$string
= "This\r\nis\n\ra\nstring\r";
echo
nl2br($string);
?>

以上範例會輸出

This<br />
is<br />
a<br />
string<br />

參見

新增註記

使用者貢獻的註記 6 則註記

CGameProgrammer at gmail dot com
19 年前
重要的是要記住,這個函式並不會將換行字元取代為 <br> 標籤。相反地,它會在每個換行字元之前插入一個 <br> 標籤,但仍然保留換行字元本身!這在我的撰寫函式時造成了一些問題 —— 我忘記了換行字元仍然被保留。

如果您不想要換行字元,請執行

<?php
$Result
= str_replace( "\n", '<br />', $Text );
?>
ngkongs at gmail dot com
17 年前
要將所有換行字元取代為 <br />
最佳解決方案(在我看來)是

<?php
function nl2br2($string) {
$string = str_replace(array("\r\n", "\r", "\n"), "<br />", $string);
return
$string;
}
?>

因為每個作業系統的換行字元 ASCII 字碼都不同
Windows = \r\n
Unix = \n
Mac = \r

對我來說完美運作
N/A
16 年前
這裡有一個更簡單的

<?php
/**
* 將 BR 標籤轉換為換行符號
*
* @param string 要轉換的字串
* @return string 轉換後的字串
*/
function br2nl($string)
{
return
preg_replace('/\<br(\s*)?\/?\>/i', "\n", $string);
}
?>

享受一下
fquffio at live dot it
10 年前
從 PHP 4.3.10 和 PHP 5.0.2 開始,這應該是將 <br /> 和 <br> 標籤替換為換行符號和回車符號最正確的方法。
<?php
/**
* 將 BR 標籤轉換為換行符號和回車符號。
*
* @param string 要轉換的字串
* @return string 轉換後的字串
*/
function br2nl ( $string )
{
return
preg_replace('/\<br(\s*)?\/?\>/i', PHP_EOL, $string);
}
?>
(請注意,這是對此函數的 minor 修改: https://php.dev.org.tw/nl2br#86678 )

您可能還希望「特定於平台」,因此此函數可能會有幫助
<?php
/**
* 將 BR 標籤轉換為換行符號和回車符號。
*
* @param string 要轉換的字串
* @param string 要用作分行符號的字串
* @return string 轉換後的字串
*/
function br2nl ( $string, $separator = PHP_EOL )
{
$separator = in_array($separator, array("\n", "\r", "\r\n", "\n\r", chr(30), chr(155), PHP_EOL)) ? $separator : PHP_EOL; // 檢查提供的 $separator 是否有效。
return preg_replace('/\<br(\s*)?\/?\>/i', $separator, $string);
}
?>
aabaev
6 年前
雙引號不等於單引號

php > echo nl2br('\r\n');
\r\n
php > echo nl2br("\r\n");
<br />
Anders Norrbring
18 年前
看到所有這些關於 br2nl 函數的建議,我也可以看到,如果 html 換行寫得馬虎,這些建議都行不通。我們知道,不能相信使用者會寫出好的程式碼,而且混合大小寫的情況並不少見。

我認為這小段程式碼可以解決大部分問題,包括 XHTML 風格和 HTML,甚至是混合大小寫,例如 <Br> <bR />,甚至 <br > 或 <br />。

<?php
函式 br2nl($text)
{
return
preg_replace('/<br\\s*?\/??>/i', '', $text);
}
?>
To Top