Hello World

Just So So ...

nl2br替换\r\n之后仍会隐式换行

jQuery PHP 0 评

在WEB开发中,原生textarea中带有回车换行的内容,是以\r\n的状态提交到服务端的。
我们经常需要用到的场景就是把\r\n转换为HTML可识别的
,PHP中提供了很好的原生函数支持nl2br(与之相反的是br2nl,顾名思义就是把
转为\r\n)。一般情况下,转换之后的内容直接输出到浏览器,会因为解析
而达到预期效果。

但!

也有意料之外的情况!

如果转换的内容不是直接输出到浏览器(一般指直接echo),而是通过js的document.write方法去写到页面,因为js是不支持代码换行的,会认为是语法错误,那么就会产生意想不到的bug了!
因为,nl2br把\r\n转换为
的同时,仍然会把后面的内容隐式换行。
如textarea里面是这样的内容:

abcde
12345

提交到服务端PHP处理nl2br($_POST['content']),利用var_dump加上pre可以看到,转换的内容并不是

<pre>abcde<br />12345</pre>

而是

<pre>abcde<br /> 
12345</pre>

后者这种方式也会保存到数据库当中,那么,当使用document.write('$str')打算正确输出到页面时,就会得到js语法错误了。

没办法,如果有这种需求,只能利用其他方法转换回车换行,如

str_replace(array("\r\n", "\r", "\n"), "<br />", $_POST['content'])

发表评论
撰写评论