移动端更新日志换行显示
问题说明
做移动端更新日志接口时,碰到换行符的问题,更新日志内容是从后台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 国际许可协议 进行许可。
海滨擎蟹
微信
支付宝