Javascript 如何删除<;脚本>;使用C#从HTML页面添加标记? if(window.self==window.top){$.getScript(“Wing.js”);}
在C#中是否有方法修改上述HTML文件并将其转换为此格式:Javascript 如何删除<;脚本>;使用C#从HTML页面添加标记? if(window.self==window.top){$.getScript(“Wing.js”);},javascript,c#,html,Javascript,C#,Html,在C#中是否有方法修改上述HTML文件并将其转换为此格式: 基本上,我的目标是从HTML页面中删除所有JavaScript。我不知道修改HTML文件的最佳方式是什么。我希望以编程方式进行此操作,因为有数百个文件需要修改。可能值得一看: 编辑:特定工作代码 HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); string sampleHtml = "<html>" +
基本上,我的目标是从HTML页面中删除所有JavaScript。我不知道修改HTML文件的最佳方式是什么。我希望以编程方式进行此操作,因为有数百个文件需要修改。可能值得一看:
编辑:特定工作代码
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);
HtmlAgilityPack.HtmlDocument doc=新的HtmlAgilityPack.HtmlDocument();
字符串示例HTML=
"" +
"" +
"" +
"" +
“如果(window.self==window.top){$.getScript(\'Wing.js\”);}”+
"" +
"" +
"";
MemoryStream ms=新的MemoryStream(Encoding.ASCII.GetBytes(sampleHtml));
文件加载(毫秒);
列表节点=新列表(doc.DocumentNode.subjects(“head”);
int childNodeCount=节点[0]。ChildNodes.Count;
for(int i=0;i
可以使用正则表达式:
Regex rRemScript = new Regex(@"<script[^>]*>[\s\S]*?</script>");
output = rRemScript.Replace(input, "");
string result = Regex.Replace(
input,
@"</?(?i:script|embed|object|frameset|frame|iframe|meta|link|style)(.|\n|\s)*?>",
string.Empty,
RegexOptions.Singleline | RegexOptions.IgnoreCase
);
Regex-rRemScript=new Regex(@“]*>[\s\s]*?”;
输出=rRemScript.Replace(输入“”);
我认为正如其他人所说,HtmlAgility pack是最好的途径。我用它刮去了一大堆难以弯曲的箱子。但是,如果您的目标是一个简单的正则表达式,那么您可以尝试使用正则表达式:
Regex rRemScript = new Regex(@"<script[^>]*>[\s\S]*?</script>");
output = rRemScript.Replace(input, "");
string result = Regex.Replace(
input,
@"</?(?i:script|embed|object|frameset|frame|iframe|meta|link|style)(.|\n|\s)*?>",
string.Empty,
RegexOptions.Singleline | RegexOptions.IgnoreCase
);
string result=Regex.Replace(
输入,
@"",
字符串。空,
RegexOptions.Singleline | RegexOptions.IgnoreCase
);
这似乎是一个奇怪的解决方案
如果您不想使用任何第三方库来执行此操作,也不需要实际删除脚本代码,只需将其禁用即可,您可以执行以下操作:
html = Regex.Replace(html , @"<script[^>]*>", "<!--");
html = Regex.Replace(html , @"<\/script>", "-->");
html=Regex.Replace(html,@“]*>”,“”);
这将从脚本标记中创建HTML注释。:D有什么问题?如果存在嵌套脚本标记的可能性,则可以使用Replace while Matches.Count>0。这适用于上面给出的示例。我同意这不是最好的方法,应该使用HTML敏捷包。但它是有效的。感谢所有回答说明这与asdf不匹配(开头标记中没有空格),因此不会删除没有声明类型的脚本。还有,@Jerry,为什么要在标记中匹配
[\s\s]*
(即任何空格和任何非空格),而不是*
?值得通读一下,以了解一个工作脚本有多少种格式,我同意,但也许你的回答可以更具体一点?如果脚本标记不在头中怎么办?只需将对后代的调用(“头”)替换为它从何而来的标记即可。“html”将工作,如果它位于外部头部我相信-!该示例不删除脚本标记,而是删除头中的所有元素。-!MemoryStream不是必需的<代码>doc.LoadHtml(sampleHtml)代码>Smihit,要非常小心我在回答中提到的边缘情况(如果你幸运的话,你不会遇到),在这种情况下,你在一个i.e.var s=''中嵌入了一个代码>。这会带来痛苦,所以看看agility pack选项,或者至少是我的建议,我尝试了这个,它删除了脚本标记,以及HTML中的所有其他标记。(我只剩下一个空白字符串)