代码之家  ›  专栏  ›  技术社区  ›  danninta

在文档期间解码HTML。GetElementByID('输入')。值='data[0]',带有动态数组数据

  •  0
  • danninta  · 技术社区  · 7 年前

    下午好

    因此,我今天了解到,我开发的一个web应用程序(用于我的办公室跟踪一些安全报告数据)无法将html标记添加到缓解字段中。这些文件作为文件保存到数据库中 varchar ,这是完美的。然而,当页面重新加载并再次读取以显示时,它会出错,因为ColdFusion正在读取这些标记并阻止我的数据表正确初始化。

    玩了几场之后,我决定 <td>#EncodeForHTML(queryValue)#</td> 对于DataTable初始化,允许其可见。然而,下一步是从DataTable中获取行数据,点击弹出式输入,我正在使用这些输入对行修改进行解码。如果我保持现在的状态(如下所示),它将打开带有编码数据的弹出窗口,并且很难读取。我试着使用 DecodeForHTML(data[#]) ,有输出和无输出。在输出中,我得到一个错误,即页面加载时数据未定义,因为只有单击一行才能创建数组,没有输出,我会得到一个语法错误。

    更清楚地说,我的问题是,当我在 <textarea> 在我的弹出窗口中?

    数据表创建代码:

    <div id="allFindings" style="max-height:50%">
            <table id="dt_table_findings" class="display" style="table-layout:fixed; width:100%; font:calibri; font-size:11px; text-align:left;">
                <thead>
                    <tr>
                        <th style="width:4%">Task Num</th>
                        <th style="width:5%">App</th>
                        <th style="width:5%">Priority</th>
                        <th style="width:5%">Vuln ID</th>
                        <th style="width:7%">Task</th>
                        <th style="width:5%">Status</th>
                        <th style="width:5%">Category</th>
                        <th>Document</th>
                        <th>Reasoning</th>
                        <th>Mitigation</th>
                        <th>Resources</th>
                        <th>Comments</th>
                        <th style="width:5%">Milestone Date</th>
                        <th style="width:5%">Follow-Up Date</th>
                        <th style="width:6%">Planned Completion</th>
                        <th style="width:5%">Closed</th>
                        <th style="width:5%">Last User</th>
                    </tr>
                </thead>
                <tbody>
                    <!---Fill datatable with Findings--->
                    <cfloop query="#findingsQuery#">
                        <tr style="">
                            <td>#TASK_NUM#</td>
                            <td>#APPLICATION#</td>
                            <td>#PRIORITY#</td>
                            <td>#VULN_ID#</td>
                            <td>#TASK#</td>
                            <td>#STATUS#</td>
                            <td>#TASK_CATEGORY#</td>
                            <td>#DOCUMENT#</td>
                            <td>#REASONING#</td>
                            <td>#EncodeForHTML(MITIGATION)#</td>
                            <td>#RESOURCES#</td>
                            <td>#COMMENTS#</td>
                            <td>#MILESTONE_DATE#</td>
                            <td>#FOLLOWUP_DATE#</td>
                            <td>#PLANNED_COMPLETION#</td>
                            <td>#CLOSED#</td>
                            <td>#LAST_USER#</td>
                        </tr>
                    </cfloop>
                </tbody>
            </table>
        </div>
    

    弹出分区:

    <div id="edit_findings" class="modal" style="min-width:550px;">
          <cfform id="form_updateFindings">
                <!---Hidden Popup Identifier for Submit Page--->
                <cfinput type="hidden" name="view" id="view" value="findings">
                <!--- Hidden Task Num --->
                <cfinput type="hidden" name="h_taskNum" id="h_taskNum" />
                <!---Shown Task Number--->
                <p><label>Task Num: </label>&nbsp;
                <cfinput type="text" name="taskNum" id="taskNum" disabled="disabled" /></p>
                <!---Shown Application Name--->
                <p><label>App: </label>&nbsp;
                <cfinput type="text" name="app" id="app" /></p>
                <!---Shown Priority--->
                <p><label>Priority: </label>&nbsp;
                <cfinput type="text" name="priority" id="priority" /></p>
                <!---Shown Vulnerability ID--->
                <p><label>Vuln ID: </label>&nbsp;
                <cfinput type="text" name="vuln_id" id="vuln_id" /></p>
                <!---Shown Task--->
                <p><label>Task: </label>&nbsp;
                <cfinput type="text" name="task" id="task" size="45" /></p>
                <!---Shown Status--->
                <p><label>Status: </label>&nbsp;
                <cfinput type="text" name="status" id="status" /></p>
                <!---Shown Category--->
                <p><label>Category: </label>&nbsp;
                <cfinput type="text" name="category" id="category" /></p>
                <!---Shown Document Location--->
                <p><label>Document: </label>&nbsp;
                <cfinput type="text" name="document" id="document" size="45" /></p>
                <!---Shown Resources--->
                <p><label>Resources: </label>&nbsp;
                <cfinput type="text" name="resources" id="resources" size="45" /></p>
                <!---Shown Reasoning Box--->
                <p><label>Reasoning: </label>&nbsp;
                <textarea name="reasoning" id="reasoning" cols="35" rows="5"></textarea></p>
                <!---Shown Mitigation Box--->
                <p><label>Mitigation: </label>&nbsp;
                <textarea name="mitigation" id="mitigation" cols="35" rows="5"></textarea></p>
                <!---Shown Milestone Date Box--->
                <p><label>Milestone Date: </label>&nbsp;
                <textarea name="milestone" id="milestone" cols="35" rows="5"></textarea></p>
                <!---Shown Comments Box--->
                <p><label>Comments: </label>&nbsp;
                <textarea name="comments" id="comments" cols="35" rows="5"></textarea></p>
                <!---Shown Follow Up Date--->
                <p><label>Follow-Up Date: </label>&nbsp;
                <cfinput type="text" name="followup" id="followup" /></p>
                <!---Shown Planned Completion--->
                <p><label>Planned Completion: </label>&nbsp;
                <cfinput type="text" name="plannedcomplete" id="plannedcomplete" /></p>
                <!---Shown Closed--->
                <p><label>Closed: </label>&nbsp;
                <cfinput type="text" name="closed" id="closed" /></p>
                <!---Shown Last User--->
                <p><label>Last User: </label>&nbsp;
                <cfinput type="text" name="lastuser" id="lastuser" disabled="disabled"/></p>
                <br />
                <!---Submit Button for Update Query--->
                <cfinput type="button" class="btn" id="submitEditFindings" name="submitEditFindings" value="Submit" onClick="fn_updFindings();">
    
          </cfform>
        </div>
    

    DataTable初始化脚本和行单击操作:

    $(document).ready( function () {
            var table = $('#dt_table_findings').DataTable( {
            "bLengthChange": false,
            "pageLength": 10,
            "dom": 'frti<"toolbar">p',
            initComplete: function(){
                $("div.toolbar").html('<input type="button" name="addButton" class="add-new-button" onclick="fn_OpenModal()"><input type="submit" name="downButton" class="download-button">');
    
            }
        } );    
    
            <!--- Actions on Datatable Row Click --->
            $('#dt_table_findings tbody').on('dblclick', 'tr', function () {
                var data = table.row( this ).data();
                <!--- Set hidden variables for popup 
                alert(data);--->
                document.getElementById('h_taskNum').value = data[0];
                document.getElementById('taskNum').value = data[0];
                document.getElementById('app').value = data[1];
                document.getElementById('priority').value = data[2];
                document.getElementById('vuln_id').value = data[3];
                document.getElementById('task').value = data[4];
                document.getElementById('status').value = data[5];
                document.getElementById('category').value = data[6];
                document.getElementById('document').value = data[7];
                document.getElementById('comments').value = data[11];
                document.getElementById('reasoning').value = data[8];
                document.getElementById('mitigation').value = data[9];
                document.getElementById('resources').value = data[10];
                document.getElementById('milestone').value = data[12];
                document.getElementById('followup').value = data[13];
                document.getElementById('plannedcomplete').value = data[14];
                document.getElementById('closed').value = data[15];
                document.getElementById('lastuser').value = data[16];
                <!--- Show popup --->
                $('#edit_findings').modal();
            } );
        } );
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Jon Hirschi    7 年前

    如果我正确地阅读了您的问题和代码,那么您在缓解字段中得到了html标记,然后在以弹出的形式显示它们时遇到了问题。如果您将输出编码为html,那么它看起来很糟糕,可能无法读取,因为本来是html标记的内容会变成类似的内容 %lt;b%gt;something%lt;/b%gt;

    1. 去掉所有html标记或
    2. 使用能够解释html的控件/所见即所得编辑器。

    这两个选项中最简单的是选项1。如果您通过以下方式运行文本:

    REReplaceNoCase(text, "<[^[:space:]][^>]*>", "", "ALL");
    

    编辑 既然您表示希望在字符串中保留html标记,那么正如您所说的,最好的方法是去掉 < >

    REReplaceNoCase(text, "<|>", "", "ALL");
    

    但需要注意的是,这将删除所有>和<字符串中的值。因此,如果有人在字符串之外使用这些值,您最终会错过这些值。ie x>=34将最终成为x=34。