当前位置: 首页 > 知识库问答 >
问题:

是否可以使用百里香叶和Spring将 utf-8 编码的 html 代码注入 html 页面

钦楚青
2023-03-14

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

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

控制器的请求方法如下所示:

    @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/>
Классный видос, да?

结合前面两个列表的结果是这样的

正如我之前提到的,我遇到了麻烦,我有一些曲线符号,而不是俄罗斯的。此外,我应该注意到,在没有注入的正常页面加载情况下,所有的俄语符号都可以正确显示。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;
}

因此,接下来的问题是:是否可以直接注入从控制器接收的 html 代码,该代码使用具有正确的 UTF-8 编码而没有曲线符号的正确 UTF-8 编码作为属性注入?

共有1个答案

秋向阳
2023-03-14

您可以这样做,但是您至少需要修改以下代码行:

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

对此:

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

这使用带有java.nio.charset.StandardCharsets.UTF_8字符集的 readString() 方法。否则,来自 readAllBytes() 的字节将以其他(非 UTF-8)编码写入字符串 - 可能取决于 JVM 启动时拾取的默认字符集。

然而,为了学习Thymeleaf,我建议查看Thymeleif片段(如果您还没有这样做),因为这些片段是为此而设计的。

这将引导您进入具有很大灵活性的模板布局。

 类似资料:
  • 我不明白,如果html模板与我在ModelAndView中获得的属性链接,如何将RESTFull服务的@Controller更改为@RestController 在胸腺叶模板中 但我想进入索引页面,在后台获取用户名 我可以使用ajax来更新标记“p”,但这样使用thymeleaf并没有什么好处,我可以使用jsp。那么,在Rest时使用thymeleaf的最佳方式是什么?它是否合理?

  • 我正在为一位位于巴西的客户开发一个网站。他的网站的一部分显示了用户的反馈/评论。 以下是一个例子: 正确版本: “这是我的一分钟!” 当我向用户输出时,显示如下内容: 不正确的版本: “这是我的一分钟!” 我将这些评论保存到mySQL数据库(Hostgator),并将数据库排序规则设置为“utf8\U unicode\U ci”。 在超文本标记语言的顶部,我声明了以下内容: 我使用Laravel

  • 问题内容: 我想抢先获取要在中加载的网页的HTML代码,使用正则表达式解析它,并仅显示所需的HTML代码,同时让该网页仍然认为它已加载了所有内容。 有什么方法可以通过或类似方法来做到这一点? 编辑:我尝试过此: 该接口永远不会被调用 问题答案: 不得不使用HttpClient。无需Cookie,只需解析html:

  • 问题内容: 我在win7(x64)上安装了标准XAMPP。在过去的项目中遇到了编码方面的麻烦,其中mysql编码与php enconding不匹配,而php enconding有时又以其他编码形式输出html,因此,我决定始终使用utf-8对所有内容进行编码。 我刚刚开始使用html标记,并且已经遇到了麻烦。 我的页面是使用utf-8保存的( 我认为 没有BOM ) // update:事实并非如

  • 本章是由 Alex Cabal 最初撰写在 PHP Best Practices 中的,我们使用它作为进行建议的基础。 这不是在开玩笑。请小心、仔细并且前后一致地处理它。 目前,PHP 仍未在底层实现对 Unicode 的支持。虽然有很多途径可以确保 UTF-8 字符串能够被正确地处理,但这并不是很简单的事情,通常需要对 Web 应用进行全方面的检查,从 HTML 到 SQL 再到 PHP。我们将

  • 我正在尝试在我的应用程序中开发一个新的密码功能。当用户打开设置新密码页面时,它有3个输入字段:新密码,再次输入新密码,以及一个隐藏字段uuId。有了这个uuid可以帮助我正确更新数据库记录。我已经使用了双控制器方法,但有些地方出了问题,因为uuid字段没有填充。