从数据库检索的HTML看起来不正确

时间:2016-07-30 09:08:30

标签: spring-security ckeditor jsoup spring-4

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

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

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

  1. 用户在ckeditor中输入粗体文本,并将其另存为
  2. <p><strong>Bold</p></strong>

    1. 但是当我启动视图页面(jsp)时,这些数据与html标签一起出现,因为它来自数据库,如下所示: -
    2. <p><strong>Bold</p></strong>

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

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

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

      你能否帮我解决这个问题,我无法找到&lt;&gt;的转换位置到

      &lt; &gt;

      正在发生?

      由于

2 个答案:

答案 0 :(得分:3)

在jsp中添加以下代码

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

答案 1 :(得分:1)

您的问题是这些数据是使用转义的HTML。最常见的解决方案是使用apache-common-lang库。那么你只能通过这个来解读HTML:

StringEscapeUtils.unescapeHtml(retrivedDataFromDatabase)

为此你必须导入Apache Common:

import org.apache.commons.lang.StringEscapeUtils;

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

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}" />