gpt4 book ai didi

java - 是否可以使用 thymeleaf 和 spring 将 utf-8 编码的 html 代码注入(inject) html 页面

转载 作者:行者123 更新时间:2023-12-04 15:18:53 25 4
gpt4 key购买 nike

最近我决定尝试使用 Spring MVC 学习 Thymeleaf。目前我正在存储 html 正文片段,例如 img、iframe 等。使用带有 UTF-8 编码和西里尔符号的 thymeleaf 标签将此 html 片段注入(inject)到一个通用 html 页面后,问题就出现了。更准确地说,这些 html 片段来自 Spring Controller 的模型属性。是否可以仅将片段注入(inject)一个通用的 html 页面,如下所示:

<html xmlns:th="https://www.thymeleaf.org">
<head></head>
<body>
[(${contents})] <!-- contents is that fragment I want to inject -->
</body>
</html>

Controller的请求方法如下所示:

    @GetMapping("/getArticle/{id}")
public String getArticle(@PathVariable Long id, Model model) throws IOException {
Article article = articleService.getById(id);
String contents = new String(Files.readAllBytes(Paths.get(article.getText())));
model.addAttribute("contents", contents);
return "news//article";
}

内容插入片段示例:

<h1>Кириллица</h1>
<br/><iframe style='width: 30%; height: 35%;' src='link'></iframe><br/>
Классный видос, да?

The result of combining 2 previous lists gives me this

正如我之前提到的,我遇到了一些曲线符号而不是俄语符号的问题。另外,我应该注意,在没有注入(inject)的情况下正常加载页面的情况下,所有俄罗斯符号都会正确显示。有来自 Spring 配置的我的 ViewResolver 和 TemplateResolver:

@Bean
public SpringResourceTemplateResolver templateResolver() {
SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
templateResolver.setApplicationContext(applicationContext);
templateResolver.setPrefix("/WEB-INF/views/");
templateResolver.setSuffix(".html");
templateResolver.setCharacterEncoding("UTF-8");
templateResolver.setTemplateMode(TemplateMode.HTML);
templateResolver.setCacheable(true);
return templateResolver;
}

@Bean
public ThymeleafViewResolver viewResolver() {
ThymeleafViewResolver thymeleafViewResolver = new ThymeleafViewResolver();
thymeleafViewResolver.setCharacterEncoding("UTF-8");
thymeleafViewResolver.setContentType("text/html; charset=UTF-8");
return thymeleafViewResolver;
}

因此,接下来的问题是:是否可以使用带有正确 UTF-8 编码且没有曲线符号的 thymeleaf 标签直接注入(inject)从 Controller 接收的 html 代码作为属性?

最佳答案

你可以这样做,但你至少需要改变这一行:

String contents = new String(Files.readAllBytes(Paths.get(article.getText())));

为此:

String contents = Files.readString(Paths.get(article.getText()), StandardCharsets.UTF_8);

这使用 readString() 方法和 java.nio.charset.StandardCharsets.UTF_8 字符集。否则,来自 readAllBytes() 的字节将被写入可能是其他(非 UTF-8)编码的字符串 - 可能取决于 JVM 在它时选择的默认字符集开始了。

但是,为了学习 Thymeleaf,我建议查看 Thymeleaf fragments (如果您还没有这样做的话),因为这些都是为此目的而设计的。

这将引导您进入 template layouts , 具有很大的灵 active 。

关于java - 是否可以使用 thymeleaf 和 spring 将 utf-8 编码的 html 代码注入(inject) html 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63798024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com