我将文本存储在SQL中作为HTML。我无法保证这些数据格式正确,因为用户可以从任何地方复制/粘贴到我正在使用的编辑器控件中,或者手动编辑生成的HTML。
问题是:什么是删除或以某种方式忽略<script/>
和<form/>
标记的最佳方式,以便当用户的文本显示在Web应用程序的其他位置时,它不会中断包含页面的正常操作。
我已经玩弄了<script>
/ <form>
与<div>
进行“查找和替换”的想法(显然考虑到了空格和结束标记,如果存在的话) )。我也愿意以某种方式“忽略”某些标签。据我所知,对于<div id="MyContent">
中的所有元素,可以有一些内置的说法(在HTML,CSS或JavaScript中),将<form>
和<script>
视为{{ 1}}。
非常感谢任何帮助或建议!
答案 0 :(得分:1)
在清理用户输入方面,表单和脚本标签不是唯一应该清理的标签。
完成这项工作的最佳方式取决于您使用的工具。看看这些问题:
答案 1 :(得分:1)
由于您使用的是.Net,我建议使用HtmlAgilityPack
因为它易于使用,并且可以处理格式错误的HTML。
答案 2 :(得分:0)
这取决于您使用的语言。一般来说,我建议使用HTML解析器,从代码片段构建一个小DOM,然后核对不需要的元素。有许多优秀的HTML解析器,专门用于处理真实世界的凌乱HTML。示例包括BeautifulSoup(Python),HTMLParser(Java)......而且,因为我在打字时得到了答案,所以Colin说了什么!
答案 3 :(得分:0)
不要试图自己动手 - 有太多的技巧可以让一些脚本和一般的肮脏进入页面。使用Microsoft AntiXSS library - 版本3.1内置了HTML卫生。您可能需要GetSafeHTMLFragment方法,该方法返回已清理的HTML块。见my previous answer。
答案 4 :(得分:0)
虽然建议的答案是可以接受的,但我最终使用了一个好的旧正则表达式来替换<script>
和<form>
标记的<div>
和{{1}}。
答案 5 :(得分:0)
txtStore.Text=Regex.Replace(txtStore, "<.*?>", string.Empty);
答案 6 :(得分:0)
我以前遇到过同样的问题。但我的情况有所不同。我正在向页面添加ajax请求的内容。来自ajax响应的内容是html,它还包含脚本标记。我只想获得没有任何脚本的HTML,所以我用jquery从ajax响应中删除了所有脚本标记。