1 描述
应用系统中,发现如果用户在大文本框中输入了回车符并保存了数据,那么获取数据时,就会发生错误,跟踪发现,报的是 json 格式错误。
2 分析
前端 web 设计了大文本框,这就意味着可以由用户任意输入字符,甚至包括回车符!而我们的后端与前端交互的数据格式是 json,如果数据中包含回车符 \r\n
或者 \\r\\n
,会被浏览器判定为格式不正确。这样,前端页面就没有办法渲染得到的数据,因此抛错。
3 解决
因为我们的前端的数据只是表格展示,所以我们只要把回车符过滤掉,就可以了。(如果需要在大文本框中重新展示,可以加入 json 支持的特殊字符,然后在显示时再进行一次转换,这样就能满足要求咯 O(∩_∩)O~)
因为涉及的字段比较多,用的数据又都是放在 freemarker 的 ftl 文件中,所以我们写了一个通用函数,过滤了回车符:
core.ftl
<#--过滤回车符函数-->
<#--输入:字符串-->
<#--输出:-->
<#function filterEntryKey s="">
<#return s?replace("\r\n", "")?replace("\\r\\n","")/>
</#function>
可以这样使用:
<#import "core.ftl" as core/>
...
${core.filterEntryKey(data.remarks!"")}"
...