【问题标题】:Decode html script with java用java解码html脚本
【发布时间】:2015-11-09 07:23:34
【问题描述】:

我正在尝试用 java 解码 html 脚本。编码的 html 脚本是从数据库中获取的。这就是我在我的行动课上尝试的。

rs = stmt.executeQuery(sql);
while (rs.next()) {
    String afterDecoding = StringEscapeUtils.unescapeHtml4(rs.getString("design"));
    System.out.println("afterDecoding-"+afterDecoding);
    design = afterDecoding;
}

我的 jsp (createreport.jsp) 文件。

<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title></title>
</head>
<body>
<div id="design">
    <s:property value="%{design}" />

</div>

这就是我调用动作的方式。

function createReport() {
    var reportID = $('#a1').text();

    var xhttp = new XMLHttpRequest();

    xhttp.open("GET", "createreport.action?reportID=" + reportID, true);
    xhttp.send();

    xhttp.onreadystatechange = function() {
        if (xhttp.readyState == 4 && xhttp.status == 200) {
            console.log(xhttp.responseText);

            document.getElementById("report_container").innerHTML = xhttp.responseText;
        }
    }
}

我想做的是,

  1. 从数据库中获取编码后的html脚本——这样就ok了
  2. 我想将此脚本设置为 div 的内容。为此,我尝试按照上述方法进行操作。

    document.getElementById("report_container").innerHTML = xhttp.responseText; 但该脚本作为文本打印在我的网页上,而不是作为 html 脚本。

console.log(xhttp.responseText); 行打印如下。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title></title>
</head>
<body>
<div id="design">
    &lt;fieldset&gt;&lt;div class=&quot;component&quot; data-content=&quot;&lt;form class='form'&gt;
 &lt;div class='controls'&gt;

 &lt;label class='control-label'&gt; Report Title &lt;/label&gt;
 &lt;input class='input-large field' data-type=&quot;input&quot;                    type='text' name='name' id='name' value ='Employee Details' /&gt;

 &lt;label class='control-label'&gt; Text Align &lt;/label&gt;
 &lt;select class=&quot;field&quot; data-type=&quot;select&quot; id='textalign'&gt;

 &lt;option value=&quot;text-left&quot;  &gt;Left&lt;/option&gt;

 &lt;option value=&quot;text-right&quot;  &gt;Right&lt;/option&gt;

 &lt;option value=&quot;text-center&quot;  selected         &gt;Centre&lt;/option&gt;

&lt;/select&gt;

&lt;hr/&gt;
&lt;button id=&quot;save&quot; class='btn btn-  info'&gt;Save&lt;/button&gt;&lt;button id=&quot;cancel&quot; class='btn btn-     danger'&gt;Cancel&lt;/button&gt;

 &lt;/div&gt;
 &lt;/form&gt;

 &quot; data-title=&quot;Form Name&quot; data-trigger=&quot;manual&quot;   data-html=&quot;true&quot;&gt;&lt;!-- Title --&gt;
 &lt;h3 id=&quot;title-0&quot; class=&quot;text-center&quot;&gt;Employee Details&lt;/h3&gt;
 &lt;/div&gt;&lt;div class=&quot;component&quot; data-content=&quot;&lt;form class='form'&gt;
 &lt;div class='controls'&gt;

 &lt;label class='control-label'&gt; Sub Title &lt;/label&gt;
 &lt;input class='input-large field' data-type=&quot;input&quot; type='text' name='subtitle' id='subtitle' value ='Summary Report' /&gt;

 &lt;label class='control-label'&gt; Text Align &lt;/label&gt;
&lt;select class=&quot;field&quot; data-type=&quot;select&quot;    id='textalign'&gt;

 &lt;option value=&quot;text-left&quot;  &gt;Left&lt;/option&gt;

 &lt;option value=&quot;text-right&quot;  &gt;Right&lt;/option&gt;

 &lt;option value=&quot;text-center&quot;  selected        &gt;Center&lt;/option&gt;

 &lt;/select&gt;

 &lt;hr/&gt;
 &lt;button id=&quot;save&quot; class='btn btn-    info'&gt;Save&lt;/button&gt;&lt;button id=&quot;cancel&quot; class='btn btn-    danger'&gt;Cancel&lt;/button&gt;

 &lt;/div&gt;
 &lt;/form&gt;

 &quot; data-title=&quot;Sub Title&quot; data-trigger=&quot;manual&quot;   data-html=&quot;true&quot;&gt;&lt;!-- Sub Title--&gt;

 &lt;h5 id=&quot;subtitle-0&quot; class=&quot;text-center&quot;&gt;Summary Report&lt;/h5&gt;


 &lt;/div&gt;&lt;div class=&quot;component&quot; data-content=&quot;&lt;form class='form'&gt;
&lt;div class='controls'&gt;


&lt;hr/&gt;
&lt;button id=&quot;save&quot; class='btn btn- info'&gt;Save&lt;/button&gt;&lt;button id=&quot;cancel&quot; class='btn btn- danger'&gt;Cancel&lt;/button&gt;

&lt;/div&gt;
&lt;/form&gt;

&quot; data-title=&quot;Hr&quot; data-trigger=&quot;manual&quot; data- html=&quot;true&quot;&gt;&lt;!-- hr --&gt;
&lt;hr&gt;
&lt;/div&gt;&lt;div class=&quot;component&quot; data-content=&quot;&lt;form class='form'&gt;
 &lt;div class='controls'&gt; 

 &lt;label class='control-label'&gt; Border &lt;/label&gt;
 &lt;input class='input-large field' data-type=&quot;input&quot; type='text' name='border' id='border' value ='1' /&gt;

 &lt;label class='control-label'&gt; Columns &lt;/label&gt;
 &lt;textarea class=&quot;field&quot; data-type=&quot;textarea- split&quot;   style='min-height: 200px' id='columns'&gt;Column1
 Column2&lt;/textarea&gt;

 &lt;hr/&gt;
 &lt;button id=&quot;save&quot; class='btn btn-info'&gt;Save&lt;/button&gt;&lt;button id=&quot;cancel&quot; class='btn btn-danger'&gt;Cancel&lt;/button&gt;

 &lt;/div&gt;
 &lt;/form&gt;

 &quot; data-title=&quot;Table&quot; data-trigger=&quot;manual&quot; data-html=&quot;true&quot;&gt;&lt;!-- Table--&gt;
 &lt;div class=&quot;control-group&quot; id=&quot;tablediv&quot;&gt;

 &lt;table id=&quot;table-0&quot; class=&quot;draggable&quot;     name=&quot;table-0&quot; border=&quot;1&quot;    style=&quot;width:100%&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
 &lt;th&gt;Column1&lt;/th&gt;
 &lt;th&gt;Column2&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;&lt;/table&gt;

 &lt;/div&gt;&lt;/div&gt;&lt;/fieldset&gt;

</div>
</body>
</html>

在我的 struts.xml 中

<action name="createreport" class="net.java.com.reports.CreateReport"
        method="execute">
    <result name="success">/createreport.jsp</result>
    <result name="error">/error.jsp</result>
</action>

这就是我编码 html 脚本的方式。

encodeURIComponent($('#target').html());

我的代码缺少什么?

【问题讨论】:

    标签: javascript java html jsp struts2


    【解决方案1】:

    我会尝试改变:

    <s:property value="%{design}" />
    

    <s:property value="%{design}" escapeHtml="false"/>
    

    【讨论】:

      【解决方案2】:

      如果您需要处理 HTML,我推荐使用 jsoup for。

      但出于您所述的目的,我认为unbescape。应该足够了。它为我们进行 HTML 转义。

      HTML 可以这样转义:

      final String unescapedText = HtmlEscape.unescapeHtml(escapedText); 
      

      您将 unscapedText 文本按要求传递给响应。

      逃生操作也非常强大,让你可以 (可选)确定您想要的转义类型和级别。为了 例如,这个:

      final String escapedText =
              HtmlEscape.escapeHtml(
                      unescapedText,
                      HtmlEscapeType.HTML4_NAMED_REFERENCES_DEFAULT_TO_DECIMAL,
                      HtmlEscapeLevel.LEVEL_1_ONLY_MARKUP_SIGNIFICANT);
      

      final String escapedText = HtmlEscape.escapeHtml4Xml(unescapedText); 
      

      【讨论】:

      • 如何获得转义文本?
      • 编码的 html 从数据库中获取为字符串类型
      • @Ann18 对,所以只需从数据库中获取名为 stringfetechedHTMLFromDB 的字符串中的 HTML 并执行 final String unescapedText = HtmlEscape.unescapeHtml(stringfetechedHTMLFromDB);
      • 我试过最后的 String unescapedText = HtmlEscape.unescapeHtml(rs.getString("design"));但我收到一个错误,因为 对于 HtmlEscape 类型的方法 unescapeHtml(String) 未定义
      猜你喜欢
      • 2016-06-12
      • 1970-01-01
      • 2012-10-26
      • 1970-01-01
      • 1970-01-01
      • 2012-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多