百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程文章 > 正文

PHP中<textarea>里的内容保存MYSQL后页面输出不换行的解决方法

qiyuwang 2025-03-30 20:29 3 浏览 0 评论

PHP中有一个nl2br($string)函数
使用textarea将数据存储到mysql后,页面上读取到这个字段后使用nl2br($
string)就可以了。
在输出的时候就换行了。

如果不使用nl2br($string)的话就完全是在一行上显示了,非常的不美观。



今天咱们聊聊PHP里的nl2br函数,说实话,这玩意看起来简单,用起来也不复杂,但真正玩起来还真有不少坑。咱们从基础开始,慢慢深入到一些实际应用场景,顺便帮你避开那些可能会让你抓狂的坑。

nl2br是啥?它的全名是“new line to break”,意思就是把字符串里的换行符\n转换成HTML的
标签。比如你有个多行文本,用户输入的时候是敲回车换行的,但你直接输出到HTML里,浏览器是不认\n的,文本看起来会连在一起。这时候nl2br就出场了,帮你把\n变成
,让文本在网页上显示换行的效果。

先看个最简单的例子:

php

$text = "第一行\n第二行\n第三行";

echo nl2br($text);

输出结果是:

第一行

第二行

第三行

挺简单的?但你可能会说,这有啥好讲的,不就是个字符串替换吗?别急,咱们慢慢深入。

第一个坑:nl2br默认只替换\n,但换行符有3种:\n(Unix/Linux)、\r\n(Windows)、\r(老Mac)。如果你用了nl2br,结果发现Windows用户输入的文本换行没生效,问题可能就在这。nl2br只认\n,所以你需要自己处理一下:

php

$text = str_replace("\r\n", "\n", $text); // 先把Windows换行符变成Unix的

这就万无一失了。

第二个坑:nl2br默认输出的
标签是XHTML风格的,也就是自闭合标签。如果你用的是HTML5,标签可以简写成

。这时候你需要用到nl2br的第二个参数,把它设为true:

php

echo nl2br($text, true); // 输出

而不是

搞定。

第三个坑:如果你是在一个富文本编辑器里输出的内容,比如用户用了TinyMCE或者CKEditor,这些编辑器已经自动帮你把换行符转换成了
或者

标签。这时候你再调用nl2br,就会出现一堆重复的换行标签。你需要先判断一下这些标签是否存在:

if (!preg_match('/

$text = nl2br($text);

}

这样就避免了重复替换。

第四个坑:如果你是在处理API返回的数据,比如JSON,换行符可能是\n或者\r\n,但JSON解析后换行符可能会变成\\n或者\\r\\n,也就是被转义了。这时候直接用nl2br是没效果的,你需要先把这些转义字符还原:

php

$text = str_replace('\\n', "\n", $text);

这就OK了。

第五个坑:如果你是在处理邮件内容,邮件头的换行符是\r\n,但邮件正文的换行符可能是\n或者\r\n。你需要在处理邮件内容的时候特别注意,先统一换行符:

php

$body = str_replace("\r\n", "\n", $body);

echo nl2br($body);

这样邮件内容就能正确显示了。

好了,坑点讲完了,咱们来说点进阶的玩法。nl2br看起来简单,但其实可以玩出不少花样。

场景一:处理表单输入

用户在表单里输入了多行内容,比如一个评论。你需要在保存到数据库之前处理换行符,同时还要防止XSS攻击:

php

$comment = htmlspecialchars($_POST['comment'], ENT_QUOTES, 'UTF-8'); // 防止XSS

$comment = str_replace("\r\n", "\n", $comment); // 统一换行符

$comment = str_replace("\r", "\n", $comment);

$comment = nl2br($comment); // 转换换行符

echo $comment;

这样就安全又规范了。

场景二:处理Markdown内容

如果你在用Markdown,Markdown的换行符是两个空格加一个换行符。你可以在Markdown解析后,再用nl2br处理剩余的换行符:

php

$markdown = "第一行 \n第二行\n第三行";

$html = Markdown::parse($markdown); // 假设用了一个Markdown解析器

$html = nl2br($html);

echo $html;

这样Markdown和普通换行都能正确显示。

场景三:处理日志文件

日志文件通常是以换行符分隔的,你需要在输出日志内容时把换行符转换成

php

$log = file_get_contents('log.txt');

$log = nl2br($log);

echo $log;

这样日志内容就能在网页上正确显示了。

场景四:处理API返回的文本数据

比如你从某个API获取了一段文本数据,里面可能有\n或者\r\n,你需要在输出前统一处理:

php

$response = file_get_contents('https://api.example.com/text');

$text = json_decode($response, true)['text'];

$text = str_replace("\r\n", "\n", $text);

$text = nl2br($text);

echo $text;

这样API返回的文本数据就能正确显示了。

咱们聊聊nl2br的性能。其实nl2br的性能表现还不错,因为它只是简单地在字符串里查找\n并替换成
。如果你处理的文本很长,频繁调用nl2br可能会有性能问题,这时候可以考虑用正则表达式批量替换:

php

$text = preg_replace("/\r\n|\n|\r/", "

", $text);

这样效率会更高一些。

好了,关于nl2br的技术分享就到这里。虽然它看起来是个小函数,但用好了能让你的代码更健壮、更灵活。下次你再用nl2br的时候,别忘了检查一下各种坑点,别让这个小函数给你挖个大坑。

相关推荐

你真的会用Word画线吗?(word画线技巧)

【你真的会用Word画线吗?】①输入三个“=”回车,是一条双直线;②输入三个“”,回车,就是一条波浪线;③输入三个“”回车,就是一条虚线;④输入三个“-”,回车,就是一条细直线.....新技能get√...

「干货」Word技巧知识——进阶篇(2)

Hello,大家好,我是无拘无束的分享知识,每天跟大家分享点有用的知识,话不多说。感兴趣的朋友可以点赞、关注、收藏哦。1.将word文档中的硬回车全部消除从事来稿阅读、编辑的工作者,最头痛的事就是打...

办公室人员必备! Word快捷键大全(办公中常用的快捷键)

【Word里超简单的画线方法!】简历、总结里文字太多怎么办?用线条分隔!Word画线秘籍:①输三个"="回车,是一条双直线②输三个"~"回车,是一条波浪线③输三个"-"回车,就是一条细直线。(来源...

Word笔记大全(详细步骤)(word怎么写笔记)

字处理一、文档的基本操作1.打开/新建2.快速新建ctrl+n3.利用模板创建文件--新建--选择模板officeplus4.保存5.保护文件--信息--保护文档--限制编辑--对话框:勾选每一项...

如何删除word文档空白页?(怎么删除word里的空白页?)

在日常办公或学习中,我们经常会遇到Word文档中出现空白页的情况,这不仅影响文档的美观,还可能造成打印浪费。下面,我将为大家详细介绍如何在Office和WPS中的Word里轻松删除这些恼人的空白页。...

Win11学院:如何在Windows 11装机时禁用BitLocker磁盘加密

IT之家5月7日消息,微软计划在Windows1124H2装机过程默认启用BitLocker加密,对于用户来说有两方面的影响:其一是影响硬盘的性能,其二是用户如果没有解密密钥,可能...

办公小技巧:Word“安全模式”用通透

大家都知道Windows的安全模式。其实,Word也有安全模式。那么,Word的安全模式又是什么?何时使用这种模式?使用这种模式有何限制?当Word运行中遇到问题需要启用安全模式运行时,如何按照软件给...

段落结束敲回车,下一段格式变样了怎么处理#每天学习一点点

段落换行后的格式发生变化。段落结束敲回车键,下一段格式变样了怎么处理?大家有时候遇到文章敲回车键,在下一段打字之后会发现这一段的样子就会和之前的段落不一样,当然可以调整一下或者用格式刷刷一下,但是稍微...

硬回车、软回车等介绍(硬回车键和软回车键)

1.硬回车:硬回车占两个字节,在word中敲击Enter键即可输入硬回车,硬回车是真正的段落标记,在两个硬回车之间的文字自成一个段落。代码是^p(小写)。2.软回车:用Shift+Enter产...

Word里超简单的画线方法!(word中如何画线条)

小厅分享【Word里超简单的画线方法!】简历、总结里文字太多怎么办?用线条分隔!Word画线秘籍:①输三个"="回车,是一条双直线②输三个"~"回车,是一条波浪线③输三个"-"回车,就是一条细直线...

Word 如何更改图片、删除与删除背景,勾选图片等问题

  如果插入到Word文档中的图片想另外换一张,更换方法有两种,一种是把原图删除另外插入一张,另一种是直接更换图片。Word2016提供了更改图片的功能,用此功能更换图片会自动把原图删除,就像...

Word中批量删除空行(多种方案)(批量删除word中的空行)

如下图,在Word文档中存在大量空行(回车),为了文档整洁,需要批量取消这些回车;方法一Ctrl+h,在查找内容中输入”^p^p”,在替换为输入”^p”,单击全部替换即可(^符号在英文输入法下按Shi...

Word文档如何取消自动编号?(word文档如何取消自动编号功能)

在word文档中,当我们编辑有序号的文本内容时,word会自动识别给文本编号,如果直接删除序号再按回车键,序号又会自动填充。但有时候我们并不需要它自动编号或不喜欢它的编号格式,如何才能取消word自动...

最全的Word知识点,抓紧时间收藏起来

Word知识点1.1word工作界面Word2010的窗口组成∶窗口分标题栏、菜单栏、常用工具栏、格式工具栏、标尺、编辑区滚动条、状态栏、任务窗格。1.标题栏∶显示所编辑的文档名和程序名称。单击标题...

Word中的页眉横线就是删不掉?其实按下这个键,1秒就能去除

不知道大家在用Word的同时,有没有遇到过难删除的页眉横线呢?以前小编就是遇到这条横线,不得已将里面的文字复制到一个新的文档中,如今终于知道该怎样删除这条横线了,下面我们就来看看删除方法。一、删除页眉...

取消回复欢迎 发表评论: