从Textarea阅读时不保留换行符

时间:2010-07-15 12:33:42

标签: java jsp servlets

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

我面临的问题是,使用

读取相同内容时,textarea消息中的换行符不会被保留
request.getParameter("message");

有什么线索可以解决?

TIA。

EDIT:

textarea中的内容是:
ABCD
abcd

代码:

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"));

输出:

  

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

的消息asdfasdf的索引位置

4 个答案:

答案 0 :(得分:3)

这完全取决于你重新显示的方式。

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

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

message = message.replace("\n", "<br>");

如果message是一个用户控制的变量,这只对XSS attack holes敏感,因为你必须在JSP中没有转义它(即没有<c:out>)才能获得<br> {1}}要工作。因此,您需要事先确保message变量为sanitized

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

<div id="message"><c:out value="${message}" /></div>
#message {
    white-space: pre-line;
}

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

答案 1 :(得分:1)

两个可能的问题:

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

  • 您使用getParameter()获得的字符串包含换行符(\n),但没有按许多电子邮件程序的预期返回(\r)。

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

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

答案 2 :(得分:1)

搜索ASCII码我发现新行的定义与常用\n不同,而是定义为\r\n

问候。

答案 3 :(得分:1)

您需要encodeURIComponent()才能在服务器端提交表单和decodeURIComponent()

相关问题