Java - 确定用户输入\ n和按html表单中的输入之间的区别

时间:2015-11-13 18:47:34

标签: java html json spring postgresql

搜索网络但不确定我是否正确地提出了问题。我有一个带有textarea的网页表单。用户可以输入他们想要的内容(可以粘贴电子邮件等)。当他们提交时,我会转义像换行符这样的东西,这样当我存储在PostgreSQL数据库(json列类型)中时,它会正确保存。一切正常。但是,如果用户输入类似c:\foo\bar\notworking.txt的内容,\n被视为新行,那么我最终会

c:\foo\bar
otworking.txt

如果我看到进入控制器的字符串(用户命中输入)(基于Spring),我看到\n

问题是,如何区分键入\n并按Enter键的人?

2 个答案:

答案 0 :(得分:1)

最简单的解决方案:

String s = ...;
s = s.replaceAll("\\","\\\\");

然后在

中加载之后反之

答案 1 :(得分:0)

为了将原始文本插入JSON列,您需要文本编码为JSON,这意味着:

The following fails «badly»:
  "c:\foo\bar\notworking.txt"

编码为(假设非ASCII需要编码,如果数据库不是UTF-8则执行编码):

"The following fails \u00ABbadly\u00BB:\r\n  \"c:\\foo\\bar\\notworking.txt\""

附注:作为Java字符串文字,它将是:

String json = "\"The following fails \\u00ABbadly\\u00BB:\\r\\n  \\\"c:\\\\foo\\\\bar\\\\notworking.txt\\\"\"";

然后,您当然会使用PreparedStatement或Spring,因此SQL转义和SQL注入问题不存在。