我需要在目录中的所有文件中自动替换部分代码

时间:2019-05-12 07:20:34

标签: php html

我正在尝试将大型网站转换为PHP。所有文件的页眉/页眉部分和页脚部分都差不多。

我正试图通过将所有这些页眉节和页脚节放入一个单独的文件中来统一它们。

所以我需要替换所有

  1. 标题部分(跨度从1045到1535行),
<?php include_once "include/header.php" ?>

  1. 页脚部分(跨越80到140行)
<?php include_once "include/footer.php" ?>

从目录中的所有文件开始。

这是我需要做的一个粗略的图。请查看下面的代码。

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="">
        <meta name="description" content="">
        <meta name="author" content="">

        <title></title>

        <link rel="apple-touch-icon" href="">
        <link rel="shortcut icon" href="">

        <!-- Stylesheets -->
        <link rel="stylesheet" href=""> <!-- Some Stylesheets -->
        <link rel="stylesheet" href=""> <!-- Some Stylesheets -->
        <link rel="stylesheet" href=""> <!-- Some Stylesheets -->

        <!-- Scripts -->
        <script src=""></script>
    </head>
    <body class="">
        <nav class="nav1" role="navigation">
            <!-- Some HTML -->
        </nav>
        <div class="menubar1">
            <!-- Some HTML -->
        </div>
        <div class="menubar2">
            <!-- Some HTML -->
        </div>

        <!-- ========================================================= -->
        <!-- ========================================================= -->

        <!-- PAGE CONTENTS -->

        <!-- ========================================================= -->
        <!-- ========================================================= -->

        <!-- Footer -->
        <footer class="site-footer">
            <!-- Some HTML -->
        </footer>

        <script src=""></script> <!-- Some Script Tags -->
        <script src=""></script> <!-- Some Script Tags -->
        <script src=""></script> <!-- Some Script Tags -->
        <script src=""></script> <!-- Some Script Tags -->

        <!-- Page -->

        <!-- Google Analytics -->
        <script>
            /* Some Scripts */
        </script>
    </body>
</html>

在上面给出的代码中,我需要替换从上到下的所有内容

<div class="menubar2">

(直到结束标记) 与

<?php include_once "include/header.php" ?>

此外,我需要替换页脚下方的所有内容

使用

<?php include_once "include/footer.php" ?>

请帮助我用我的字符串替换文件的那部分。

先谢谢了。

2 个答案:

答案 0 :(得分:0)

这是一个快速的粗略解决方案。。。没有测试它,但希望它能起作用!
快点抬头!如果您打算在request .get('http://example.com/doodle.png') .on('response', function(response) { console.log(response.statusCode) // 200 console.log(response.headers['content-type']) // 'image/png' }) .on('error', function(err) { // <------- add this console.log(err) }); 内添加<div>,请在<div class="menubar2"></div>的{​​{1}}结束标记之后添加此<div class="match-hidden"></div>
先用
</div>更改class .menubar2

preg_match

答案 1 :(得分:0)

首先,请注意,通常不应将正则表达式与DOM一起使用。但是,由于我们正在讨论在文件内进行批量替换,因此我认为在这种情况下这是可以接受的(您不想丢失格式,使用DOM批量删除节点也很尴尬)。

现在,考虑到您在关于menubar2 div的结构的其他评论中所说的话,就应该这样做。

编辑:现在在menubar2下具有动态div数量:

// Compute the amount of divs within `menubar2` div
libxml_use_internal_errors(true);
$doc = new \DOMDocument();
$doc->loadHTML($html);
$menubar2_inner_div_count = (new \DOMXPath($doc))
  ->query('//div[@class="menubar2"]//div')
  ->length;

// Header
$html = preg_replace(
  '/^.*?<div class="menubar2">' . str_repeat('.*?<\/div>', $menubar2_inner_div_count + 1) . '/s', 
  '<!-- Header -->' . PHP_EOL . '<?php include_once "include/header.php" ?>', 
   $html
);

// Footer
$html = preg_replace(
  '/<footer class="site-footer">.*?<\/html>/s', 
  '<?php include_once "include/footer.php" ?>', 
  $html
);

// (Optional) Remove now useless indentation (supposes your indent is 8 spaces, 
// otherwise replace accordingly)
$html = preg_replace('/^ {8}/m', '', $html);

演示:https://3v4l.org/G3HbK