【问题标题】:StringEscapeUtils is unescaping everything, except newlines (\n)StringEscapeUtils 正在取消转义所有内容,除了换行符 (\n)
【发布时间】:2019-09-03 07:18:47
【问题描述】:

我尝试使用 Apache Commons 库 (v. 1.7) 中的 StringEscapeUtils 转义和取消转义大文本,该库将从数据库中存储和检索,在本例中为 H2 数据库。除了新行之外,几乎所有特殊字符都成功转义和取消转义。我正在使用带有百里香的 Spring Boot (v2.1.3.)。

例如,如果我尝试存储以下文本:

 He didn't say, "Stop!"

 This is a new line!

它将文本存储为:

He didn't say, \"Stop!\"\r\n\r\nThis is a new line!

哪个好。但是当我使用 unescapeJava 方法对其进行转义时,换行符无法正常工作。我明白了

He didn't say, "Stop!" This is a new line!

编辑:

unescapeJava 方法在文本显示在 html 文本区域中时起作用。但是当它呈现为纯 html 时,换行符不起作用。

【问题讨论】:

  • 欢迎来到 Stack Overflow!请阅读“如何创建minimal reproducible example”。然后使用edit 链接改进您的问题(不要通过 cmets 添加更多信息)。否则我们无法回答您的问题并为您提供帮助。不要向我们展示一些实际上与您的问题无关的生产代码。退一步,创建一个超级简单的例子来展示你的问题。为什么我们需要担心您的 addNewsItem() 方法。当您问的只是如何正确使用这些库方法时?!所以:请专注于您问题的真正核心,并删除任何无关紧要的内容。
  • 这应该可以。请显示有此问题的示例代码。
  • 你可以试试 \\n 而不是 \n。
  • @IMS 已经尝试过那个,但它会显示为\n。顺便说一句,我编辑了我的问题

标签: java spring-boot stringescapeutils


【解决方案1】:

当文本显示在 html 文本区域中时,unescapeJava 方法起作用。但是当它呈现为纯 html 时,换行符不起作用。

请检查您的 HTML 源代码,它很可能在那里

在 HTML 中,源代码中的换行符不会在屏幕上引入换行符,如果您希望将换行符替换为例如 <br/> 标记。

查看更多:

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/br

【讨论】:

  • 你说得对,之前忘了提。换行符实际上是在我的 HTML 源代码中呈现的。但我想我已经找到了解决这个问题的方法。在 CSS 中,我使用了 white-space: pre-wrap,它将保留白线和换行符。
【解决方案2】:

@Martin van Wingerden 所说的是正确的。源代码中的换行符不会在屏幕上引入/呈现它。我找到了这个帖子

Render a string in HTML and preserve spaces and linebreaks

这说明您可以使用 CSS white-space: pre-wrap 来保留格式中的空格和换行符。

【讨论】:

    猜你喜欢
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    • 2022-06-12
    • 2014-07-17
    • 2013-10-02
    • 2020-11-16
    • 2019-11-19
    • 2017-07-08
    相关资源
    最近更新 更多