如何使用 C# 从 HTML 页中删除<脚本>标记
How to remove <script> tags from an HTML page using C#?
<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
if (window.self === window.top) { $.getScript("Wing.js"); }
</script>
</head>
</html>
C#中有没有办法修改上面的HTML文件并将其转换为以下格式:
<html>
<head>
</head>
</html>
基本上,我的目标是从HTML页面中删除所有JavaScript。我不知道修改HTML文件的最佳方法是什么。我想以编程方式执行此操作,因为有数百个文件需要修改。
可以使用正则表达式来完成:
Regex rRemScript = new Regex(@"<script[^>]*>['s'S]*?</script>");
output = rRemScript.Replace(input, "");
可能值得一看: HTML Agility Pack
编辑:特定工作代码
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
string sampleHtml =
"<html>" +
"<head>" +
"<script type='"text/javascript'" src='"jquery.js'"></script>" +
"<script type='"text/javascript'">" +
"if (window.self === window.top) { $.getScript('"Wing.js'"); }" +
"</script>" +
"</head>" +
"</html>";
MemoryStream ms = new MemoryStream(Encoding.ASCII.GetBytes(sampleHtml));
doc.Load(ms);
List<HtmlNode> nodes = new List<HtmlNode>(doc.DocumentNode.Descendants("head"));
int childNodeCount = nodes[0].ChildNodes.Count;
for (int i = 0; i < childNodeCount; i++)
nodes[0].ChildNodes.Remove(0);
Console.WriteLine(doc.DocumentNode.OuterHtml);
我认为正如其他人所说,HtmlAgility包是最好的途径。我用它来刮擦和删除大量难以逼角的情况。但是,如果您的目标是一个简单的正则表达式,那么也许您可以尝试 <script(.+?)*</script>
.这将删除讨厌的嵌套javascript以及正常的东西,即链接中提到的类型(用于提取脚本标签的正则表达式):
<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
if (window.self === window.top) { $.getScript("Wing.js"); }
</script>
<script> // nested horror
var s = "<script></script>";
</script>
</head>
</html>
用法:
Regex regxScriptRemoval = new Regex(@"<script(.+?)*</script>");
var newHtml = regxScriptRemoval.Replace(oldHtml, "");
return newHtml; // etc etc
这似乎是一个奇怪的解决方案。
如果您不想使用任何第三方库来执行此操作,并且不需要实际删除脚本代码,只需禁用它,您可以这样做:
html = Regex.Replace(html , @"<script[^>]*>", "<!--");
html = Regex.Replace(html , @"<'/script>", "-->");
这会从脚本标记中创建 HTML 注释。
使用正则表达式:
string result = Regex.Replace(
input,
@"</?(?i:script|embed|object|frameset|frame|iframe|meta|link|style)(.|'n|'s)*?>",
string.Empty,
RegexOptions.Singleline | RegexOptions.IgnoreCase
);
相关文章:
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- HTML标记在脚本标记中工作
- 用cdata标记替换脚本标记
- 访问脚本标记中的Angular变量
- 如何在渲染视图时将变量传递给Node.js中的脚本标记
- HTML文档中脚本标记的位置-<头部>&<身体>有不同的行为
- 如何重新加载脚本标记
- 内联javascript与"<脚本>"字符串错误地关闭了脚本标记
- 为什么脚本标记被分解为两个字符串
- 从脚本标记访问手柄属性
- 如何通过脚本标记加载REST调用
- 在IE8中创建脚本标记
- 如何在json.erb模板中呈现脚本标记
- 什么's使用链接和脚本标记引用JavaScript源之间的区别
- 什么's使用脚本标记调用文件和ajax之间的区别
- 重复的脚本标记会导致多次运行
- 从html文件中的脚本标记调用非全局命名空间函数
- 在脚本标记中包含一个javascript文件
- 将 Java 变量从 JSP 获取到脚本标记中
- jQuery没有在ajax请求的脚本标记中加载js文件