1

我有一个文本框,用户可以在其中输入 html 片段

示例:用户在字段中输入此内容

// <![CDATA[
    <tr>
        <td>
            #= Position #
        </td>
        <td>
            #= Description #
        </td>
        <td>
            #= Location #
        </td>
        <td>
            <a href="@Url.Action("Delete")/#= Id #" class="delete-link">Delete</a>
        </td>
    </tr>
// ]]>

我将它保存到数据库并在客户端 ui 中按需调用它为 KTemplatePart.Script(KendoUI 模板)

看法

@Html.Script(
    @<script id="jobTemplate" type="text/javascript">
       @Model.KTemplatePart.Script
     </script>
)

其中 html.Script 是一个 html 助手

我的问题是它在客户端 ui 中变形

<script id="jobTemplate" type="text/javascript" >

    &lt;![CDATA[

        &lt;tr&gt;
            &lt;td&gt;
                #= Position #
            &lt;/td&gt;
            &lt;td&gt;
                #= Description #
            &lt;/td&gt;
            &lt;td&gt;
                #= Location #
            &lt;/td&gt;
            &lt;td&gt;
                &lt;a href=&quot;@Url.Action(&quot;Delete&quot;)/#= Id #&quot; class=&quot;delete-link&quot;&gt;Delete&lt;/a&gt;
            &lt;/td&gt;
        &lt;/tr&gt;

    // ]]&gt;

         </script>

有解决方法吗?

4

2 回答 2

0

这是出于安全原因而设计的,以防止脚本注入、攻击。

允许将 HTML 插入 DOM 会使您的应用程序容易受到攻击,因此默认情况下,输入会被转义。

看起来 KendoUI 没有内置的方法来取消转义 HTML,但它很容易做到:

function htmlDecode(input){
  var e = document.createElement('div');
  e.innerHTML = input;
  return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue;
}

来自: 在 Javascript 中对 HTML 实体进行转义?

于 2013-06-03T01:37:55.157 回答
0

试试这个 javascript 过滤器。

function filter(value) {
  const removeTag = new RegExp("(<[a-zA-Z0-9]+>)|(</[a-zA-Z0-9]+>)", "g");
  return value.replace(removeTag, "");
}

你可以在 codepen 上看到结果。

密码笔

于 2021-04-29T21:00:29.010 回答