【发布时间】:2021-10-01 11:13:26
【问题描述】:
我需要向 Java 中的 HTML 字符串添加一些内容。此 HTML 用于电子邮件,由 Java servlet 发送(使用 jakarta.mail)。
HMTL
在文件中:
<button style="border: 1px solid #ccc">
<a href=%s style="display: inline-block; width: 100%; height: 100%">Link can be clicked</a>
</button>
String mailBodyBase = Files.readString("some/path/to/my.html") 阅读。
值和格式代码
String URL = "\"https://some.url/at/%s\"";
String urlForUser = String.format(URL, "set236sdgh235JH"); // the argument is actually retrieved from DB
return String.format(mailBodyBase, urlForUser); // Exception occures here
预期结果
<button style="border: 1px solid #ccc">
<a href="https://some.url/at/set236sdgh235JH" style="display: inline-block; width: 100%; height: 100%">Link can be clicked</a>
</button>
我正在这样做而不是更简单的.concat(),因为我们可能希望在某个时候向 HTML 添加更多值。
异常
但是我收到了UnknownFormatConversionException:
java.util.UnknownFormatConversionException: Conversion = ';'
at java.util.Formatter.checkText(Formatter.java:2732) ~[?:?]
at java.util.Formatter.parse(Formatter.java:2718) ~[?:?]
at java.util.Formatter.format(Formatter.java:2655) ~[?:?]
at java.util.Formatter.format(Formatter.java:2609) ~[?:?]
at java.lang.String.format(String.java:2897) ~[?:?]
同样适用于:
<html style="padding: 30px 0 0 30px; font-size: 16px">
<h2 style="background-color: #0077bd; color: #eff; padding: 10px 5px;">App Name</h2>
%1$s
</html>
并使用String body = String.format [...]; 将内容放入此框架中。
解决方案
用另一个 % 掩盖 CSS 中的 %。
旧:
我已经阅读了the docs for String.format 和tutorial,但我看不到那里的问题。它可能与 HTML 中的引号 (") 有关。
我是否需要使用其他工具或 String.format 以不同的方式?
【问题讨论】:
-
@user16320675
%应该是一个占位符。 href 的 url 应该准确地放在那里:<a href=%s style="display: inline-block; width: 100%; height: 100%">。格式字符串/文件中没有%;。 -
@user16320675 哦,f*ck,是的,你说的太对了。很抱歉不能用我的眼睛。