编写html标记时,防止在View中执行脚本

时间:2014-02-04 00:18:35

标签: html asp.net-mvc

我有两个html字符串:

  1. <script type="text/javascript">alert("s");</script>
  2. 1<br>2<br>3
  3. 用户输入这些,然后我存储在我的数据库中。然后,我再次从数据库加载主题并在视图中编写主题以向用户显示主题。

    我是这样做的:

    // 1
    @MvcHtmlString.Create("<script type="text/javascript">alert("s");</script>");  
    // 2
    @MvcHtmlString.Create("1<br>2<br>3");  
    

    以下是我的观点结果:

    1.    A javascript dialog box pops up and shows the alert to the user.              
    2.    1
          2
          3
    

    在示例1中,用户可以输入脚本并显示javascript警报,用户可以看到以下字符串:

    "<script type="text/javascript">alert("s");</script>"
    

    没关系,但在示例2中,<br>标记不起作用,用户会看到:

    1<br>2<br>3
    

    如何获得这些输出:

    1:    "<script type="text/javascript">alert("s");</script>"
    2:    1
          2
          3
    

    请注意,我不想删除用户数据的任何部分,因为如果用户是开发人员并希望显示脚本语法,则应该允许他使用。

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点,我喜欢使用@ Html.Raw

@Html.Raw("1<br>2<br>3")

用于显示html,输出将是

1
2
3

@Html.Raw("<script>alert('s');</script>").ToHtmlString()

用于显示文本,通过添加ToHtmlString(),输出将是

<script>alert('s');</script>