在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'])