从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()
。