移动端更新日志换行显示
问题说明
做移动端更新日志接口时,碰到换行符的问题,更新日志内容是从后台textarea
取值后,直接入库的,虽然在数据库(mysql)中没有看到\n
等明显的换行符号,但编辑时,将更新日志放回textarea
中时,是有换行显示的。但这样的形式在客户端弹出层输出时,并没有换行。而在每行末尾加上<br/>
,客户端换行显示(不知道为什么,<br/>
明明是html标签,竟然能在弹出层起到换行的作用,猜测客户端可能做了解析,但为什么不能解析正常情况下的换行符\n
或\r\n
,不太清楚)。
回到主题,要让客户端更新日志正常显示,就要在每行末尾加上<br/>
。但让客户在后台textarea
中编辑每行末尾加<br/>
,这有点蠢,得想点变通的办法!~
解决方案1:入库前将更新日志字符串中的换行符转换为<br/>
,在下次编辑时,再转换回来。接口直接输出库中内容。
解决方案2:入库不做变化,在接口中输出时,转换为<br/>
。
概念解析
\n
或\r\n
是脚本语言里的换行标志,在textarea中换行符实体为
。<br/>
属于html标签,与textarea同等级,起到web页面上换行的效果,但在textarea中,只会识别成字符串,包括\n
或者\r\n
。
\n
转换为<br/>
js转换
var getFormatCode = function(strValue){
return strValue.replace(/\r\n/g, '<br/>').replace(/\n/g, '<br/>').replace(/\s/g, ' ');
};
也可以在PHP中转换
preg_replace('/\n/i', '<br/>', $log);
or
str_replace('\n', '<br/>', $log);
<br/>
转换为\n
(或转换为换行符实体
,直接输出),再js动态赋值给textarea,这里我选择转换为实体直接输出。
preg_replace('/<br\/>/i', ' ', $log);
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。