Подтвердить что ты не робот

Удаление тэгов <script> с HTML-страниц с использованием С#

<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>

Есть ли способ в С#, чтобы изменить указанный выше html файл и преобразовать его в формат, показанный ниже.

<html>
<head>
</head>
</html>

В основном моя цель - удалить все javascript, добавленные на html-страницы. Не знаю, какой должен быть лучший способ изменить эти html файлы. Я хочу сделать это программно, так как есть сотни файлов, которые нуждаются в модификации

4b9b3361

Ответ 1

Это можно сделать с помощью regex:

Regex rRemScript = new Regex(@"<script[^>]*>[\s\S]*?</script>");
output = rRemScript.Replace(input, "");

Ответ 2

Возможно стоит посмотреть: 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);

Ответ 3

Я думаю, как говорили другие, HtmlAgility pack - лучший маршрут. Я использовал это, чтобы очистить и удалить множество жестких дел. Однако, если простое регулярное выражение является вашей целью, возможно, вы можете попробовать <script(.+?)*</script>. Это удалит неприятный вложенный javascript, а также обычный материал, то есть тип, упомянутый в ссылке (Regular Expression for Extracting Script Tags):

<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

Ответ 4

Это может показаться странным решением.

Если вы не хотите использовать какую-либо стороннюю библиотеку для этого и не нужно действительно удалять код script, просто отключите его, вы можете сделать это:

html = Regex.Replace(html , @"<script[^>]*>", "<!--");
html = Regex.Replace(html , @"<\/script>", "-->");

Это создает комментарий HTML из тегов script.

Ответ 5

с помощью regex:

string result = Regex.Replace(
    input, 
    @"</?(?i:script|embed|object|frameset|frame|iframe|meta|link|style)(.|\n|\s)*?>", 
    string.Empty, 
    RegexOptions.Singleline | RegexOptions.IgnoreCase
);