问题说明

做移动端更新日志接口时,碰到换行符的问题,更新日志内容是从后台textarea取值后,直接入库的,虽然在数据库(mysql)中没有看到\n等明显的换行符号,但编辑时,将更新日志放回textarea中时,是有换行显示的。但这样的形式在客户端弹出层输出时,并没有换行。而在每行末尾加上<br/>,客户端换行显示(不知道为什么,<br/>明明是html标签,竟然能在弹出层起到换行的作用,猜测客户端可能做了解析,但为什么不能解析正常情况下的换行符\n\r\n,不太清楚)。

回到主题,要让客户端更新日志正常显示,就要在每行末尾加上<br/>。但让客户在后台textarea中编辑每行末尾加<br/>,这有点蠢,得想点变通的办法!~

解决方案1:入库前将更新日志字符串中的换行符转换为<br/>,在下次编辑时,再转换回来。接口直接输出库中内容。

解决方案2:入库不做变化,在接口中输出时,转换为<br/>

概念解析

\n\r\n是脚本语言里的换行标志,在textarea中换行符实体为&#10;<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(或转换为换行符实体&#10;,直接输出),再js动态赋值给textarea,这里我选择转换为实体直接输出。

preg_replace('/<br\/>/i', '&#10;', $log);