HTML 从数据库中检索出的内容不正确

HTML retrieved from database does not appear correct

我正在使用 Spring4/JPA/JSoup/Ckeditor 创建一个应用程序。

用户登录->打开页面->使用 ckeditor 输入文本->发布它(一种小型博客)。

数据已成功保存在mysql数据库中,例如:

  1. 用户在 ckeditor 中输入了一个粗体文本,它被保存为

<p><strong>Bold</p></strong>

  1. 但是当我启动视图页面时 (jsp),此数据与来自数据库的 html 标签一起出现,如下所示:-

<p><strong>Bold</p></strong>

为了正确的行为,它应该显示为 - Bold

当我查看 jsp 页面的源代码时,保存在数据库中的 html 如下所示 输出自

&lt;p&gt;&lt;strong&gt;Bold&lt;/strong&gt;&lt;/p&gt;

你能帮我解决这个问题吗,我找不到将 <> 转换为

的位置

&lt; &gt;

正在举行?

谢谢

你的问题是这些数据被转义了HTML。最常见的解决方案是使用 apache-common-lang 库。然后你只能通过这个取消转义 HTML:

StringEscapeUtils.unescapeHtml(retrivedDataFromDatabase)

为此,您必须导入 Apache Common:

import org.apache.commons.lang.StringEscapeUtils;

您可以从 this link 下载它并将其添加到您的库中。

Here 是 StringEscpaeUtils 的 JavaDoc。


编辑: 并检查您是否在 web.xml:

中注册了 encodingFilter
<filter>  
    <filter-name>encodingFilter</filter-name>  
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
    <init-param>  
       <param-name>encoding</param-name>  
       <param-value>UTF-8</param-value>  
    </init-param>  
    <init-param>  
       <param-name>forceEncoding</param-name>  
       <param-value>true</param-value>  
    </init-param>  
</filter>  
<filter-mapping>  
    <filter-name>encodingFilter</filter-name>  
    <url-pattern>/*</url-pattern>  
</filter-mapping> 

另一种解决方案:(@user3367569 - 问题所有者的最终解决方案)

插入JSP: <c:out escapeXml="false" value="${ticket.body}" />

在 jsp 中添加以下代码有效

<c:out escapeXml="false" value="${ticket.body}" />