【问题标题】:HTML retrieved from database does not appear correct从数据库检索的 HTML 显示不正确
【发布时间】:2016-12-04 23:06:51
【问题描述】:

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

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

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

  1. 用户在 ckeditor 中输入粗体文本并保存为

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

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

对于正确的行为,它应该显示为 - 粗体

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

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

你能帮我解决一下吗,我找不到 到

的转换

< >

正在发生吗?

谢谢

【问题讨论】:

    标签: spring-security ckeditor jsoup spring-4


    【解决方案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: &lt;c:out escapeXml="false" value="${ticket.body}" /&gt;

    【讨论】:

    • 我试过了,如下@Lob @XmlElement @JsonProperty public String getBody() { body = StringEscapeUtils.unescapeHtml4(body); return body; } public void setBody(String body) { String cleanHTML = Jsoup.clean(body, Whitelist.basic()); this.body = cleanHTML; } 还是不行,我是不是漏掉了什么?
    • 你还有转义的 HTML 标签?
    • 是的,仍然转义了 html 标签
    • 源代码中的输出是一样的吗?我知道它仍然是逃脱了,但是如果没有变化,那就奇怪了。或者我错过了什么......:/
    • 是的,输出与之前的 &lt 和 &gt 标签相同,我确认 html 代码以正确的方式从控制器返回,之后它的某个地方发生了变化,,不确定它是否是一些编码相关问题或其他问题...您能否指出调试的方向?
    【解决方案2】:

    在jsp中添加下面的代码工作

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多