You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SendGrid Java发送带动态换行HTML邮件的问题

解决方案:SendGrid Java发送HTML邮件保留换行和空格

为什么StringEscapeUtils.unescapeHtml4()无效?

unescapeHtml4()仅负责还原HTML转义字符(比如把&lt;转回<),完全不处理换行符\n或空格的显示逻辑,所以对保留换行/空格的需求没用。

实用解决方法

方法1:用CSS样式处理(推荐)

利用CSS的white-space: pre-wrap属性,让HTML元素自动保留空格和换行,同时支持自动换行适应容器宽度,样式更自然。

  • 实现方式:将动态内容包裹在带有该样式的HTML标签中,同时对用户输入做HTML转义防止XSS:
String userInput = "前端传入的带换行和空格的文本";
// 先转义特殊字符,再放入带样式的容器
String htmlContent = "<html><body>" +
    "<div style='white-space: pre-wrap; font-family: sans-serif;'>" +
        StringEscapeUtils.escapeHtml4(userInput) +
    "</div>" +
"</body></html>";

方法2:手动替换换行和空格

如果不想依赖CSS,可以直接将文本中的换行符替换为HTML换行标签<br>,空格替换为&nbsp;(解决多个连续空格被合并的问题):

String userInput = "前端传入的带换行和空格的文本";
// 先转义特殊字符,再替换换行和空格
String formattedText = StringEscapeUtils.escapeHtml4(userInput)
    .replace("\n", "<br>")
    .replace(" ", "&nbsp;");
String htmlContent = "<html><body>" + formattedText + "</body></html>";

方法3:使用<pre>标签

<pre>标签默认会保留所有空格和换行,但默认是等宽字体,可通过CSS调整样式:

String userInput = "前端传入的带换行和空格的文本";
String htmlContent = "<html><body>" +
    "<pre style='font-family: inherit; white-space: pre-wrap;'>" +
        StringEscapeUtils.escapeHtml4(userInput) +
    "</pre>" +
"</body></html>";

关键注意事项

无论用哪种方法,必须先对用户输入做HTML转义(StringEscapeUtils.escapeHtml4()),防止恶意代码注入(XSS攻击)。

内容的提问来源于stack exchange,提问作者Ramesh G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 02:12:35