java - String.format 与 HTML 的使用没有转换问题
问题描述
我需要向 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 中的%。
老的:
我已经阅读了String.format的文档和教程,但我看不到那里的问题。它可能与HTML 中的引号 ( " ) 有关。
我是否需要使用其他工具或String.format以不同的方式?
解决方案
我已经重现了这个问题。
以下行中的问题:
<a href=%s style="display: inline-block; width: 100%; height: 100%">Link can be
clicked</a>
使用 String.format() 函数时,我们使用 %s 或 %d 作为占位符来放置值。
在您的情况下,< a >标签的样式属性为 ; 和 % 导致错误。您可以通过将样式属性替换为类名来修复它。
在您的 css 文件中创建样式类,如下所示:
.styleClassName{
display: inline-block;
width: 100%;
height: 100%
}
并更改样式属性如下:
<a href=%s class='styleClassName'>Link can be
clicked</a>
请评论它是否有效。
推荐阅读
- html - HTML 中的 Asp-Items 选择 Razor 页面。你调用的对象是空的
- firebase - 参数类型“Null”不能分配给参数类型“FirebaseUser”.dart(argument_type_not_assignable)
- python - 如何删除临时测试文件?
- c# - 碰撞时获取特定瓷砖 - Unity3D
- python - 新创建的带有 imaplib 的文件夹被隐藏。我怎样才能取消隐藏它?
- mongodb - 从 mongodb 查询的结果创建新视图
- jenkins - jenkins 声明性管道作业控制台输出 - 更改详细程度
- flutter - 将实时数据库中的数据检索到列表视图中
- c# - HTTP Post请求正文值null c#
- laravel - 如何在 windows 的 Visual Studio 代码编辑器中定义 Laravel 类?