nl2br()函数在每个换行符前插入<br>或<br />标签,不删除原始换行符;默认使用XHTML兼容格式(<br />),可通过第二个参数控制;自动识别\n、\r\n、\r;需配合htmlspecialchars()防止XSS。

PHP 中的 nl2br() 函数是把纯文本换行符转成网页可识别换行效果最直接的方式,但它不是“替换”换行符,而是在每个换行符前面插入<br>(或 <br />),原始换行符依然保留。这点容易被忽略,却直接影响后续处理和页面渲染。
nl2br 的核心行为:插签不删换行
它不会删除 \n、\r\n 或 \r,只是在它们之前加一个 <br> 标签。比如:
-
"Hello\nWorld"→"Hello<br />\nWorld"(XHTML 模式,默认) - 浏览器渲染时看到换行,但查看 HTML 源码仍能看到
\n - 如果后续还要用
str_replace("\n", "", $s)清理换行,得注意\n还在那儿
控制输出标签格式:xhtml 参数很关键
从 PHP 5.3 起支持第二个参数 $use_xhtml,决定用哪种换行标签:
-
nl2br($text, true)→ 插入<br />(默认,XHTML 兼容) -
nl2br($text, false)→ 插入<br>(HTML5 更常见写法) - 老项目若需严格 XHTML 验证,保持
true;新项目用false更简洁
多换行符兼容:自动识别 \r\n、\r、\n
函数内部已适配主流换行格式,无需预处理:
立即学习“PHP免费学习笔记(深入)”;
-
"Line1\r\nLine2\rLine3\n"经nl2br()后,三处都会插入<br> - 不需要自己先用
str_replace("\r\n", "\n", $s)统一格式 - 但要注意:连续多个换行(如
\n\n)会变成多个<br>,可能造成过大空白,必要时配合preg_replace("/[\r\n]{2,}/", "\n", $s)压缩空行
安全搭配:nl2br 前后常要 htmlspecialchars()
nl2br() 只管换行,不管特殊字符。用户输入含 、<code>& 等会引发 XSS 或解析错误:
- 错误顺序:
nl2br($user_input)→ 再htmlspecialchars()→<被转义,但<br>也被当普通文本显示出来 - 正确顺序:
htmlspecialchars($user_input)→ 再nl2br() - 这样既防注入,又保留换行效果,且
<br>是真实 HTML 标签,不会被二次转义



















