从Textarea阅读时不保留换行符

我的java webapp从textarea获取内容,并通过电子邮件发送相同内容。

我面临的问题是,在阅读相同内容时,textarea消息中的换行符不会被保留

request.getParameter("message"); 

有什么线索可以解决?

TIA。

EDIT:

textarea中的内容是:
A B C D
A B C D

码:

 String message = request.getParameter("message"); System.out.println("index loc for message "+message+" using \\r\\n : "+message.indexOf("\r\n")); System.out.println("index loc for message "+message+" using \\n : "+message.indexOf("\n")); System.out.println("index loc for message "+message+" using \\r : "+message.indexOf("\r")); System.out.println("index loc for message "+message+" using \\n\\r : "+message.indexOf("\n\r")); 

OUTPUT:

使用\ r \ n:-1的消息asdfasdf的索引loc
使用\ n:-1的消息asdfasdf的索引loc
使用\ r:-1的消息asdfasdf的索引loc
使用\ n \ r:-1的消息asdfasdf的索引loc

这完全取决于你如何重新显示它。

听起来你正在用HTML重新显示它。 “原始”换行符不是HTML标记的一部分。 在webbrowser中右键单击“ 查看页面源” 。 你会在所有地方看到换行符。 通常在HTML标记之前和/或之后。

为了在HTML演示文稿中直观地显示换行符,您实际上应该使用
标签。 您可以使用
字符串替换换行符,如下所示:

 message = message.replace("\n", "
");

如果message是用户控制的变量,这只对XSS攻击漏洞敏感,因为你必须在JSP中没有转义它(即没有 )才能使
工作。 因此,您需要确保事先清理 message变量。

或者,您也可以在那里设置CSS white-space属性,在那里您将消息重新显示为pre 。 如果您想在block元素的上下文中包含行,则设置pre-wrap 。 或者,如果您还要折叠空格和制表符,请设置pre-line

 
 #message { white-space: pre-line; } 

这将显示预先格式化的文本(默认情况下为textarea)。

两个可能的问题:

  • textarea中的文本是自动换行的,并没有任何换行符。

  • getParameter()得到的字符串包含换行符( \n )但没有回车符( \r ),正如许多电子邮件程序所期望的那样。

作为第一步,我尝试以您可以检查的方式转储检索到的String。 例如,您可以写入文件并使用od或hex编辑器查看文件。

如果事实certificate你只是缺少CR,你可以在字符串上做一些简单的基于正则表达式的替换来修复它。

搜索ASCII码我发现新行没有定义为常常\n ,而是定义为\r\n

问候。

在提交表单和服务器端的decodeURIComponent()之前,需要encodeURIComponent()