用PHP替换PHP/HTML文件的HTML元素内容 问题

用PHP替换PHP/HTML文件的HTML元素内容 问题,php,html,replace,Php,Html,Replace,我正在尝试用PHP在服务器端编辑HTML/PHP文件。使用AJAX Post,我向服务器发送三个不同的值: 需要编辑的页面的url 需要编辑的元素的id 元素的新内容 我现在拥有的PHP文件如下所示: <?php $data = json_decode(stripslashes($_POST['data'])); $count = 0; foreach ($data as $i => $array) { if (!is_array($arr

我正在尝试用PHP在服务器端编辑HTML/PHP文件。使用AJAX Post,我向服务器发送三个不同的值:

  • 需要编辑的页面的
    url
  • 需要编辑的元素的
    id
  • 元素的新内容
我现在拥有的PHP文件如下所示:

<?php
    $data = json_decode(stripslashes($_POST['data']));
    $count = 0;
    foreach ($data as $i => $array) {
        if (!is_array($array) && $count == 0){
            $count = 1;
            // $array = file url
        }
        elseif (is_array($array)) {
            foreach($array as $i => $content){
                // $array[0] = id's
                // $array[1] = contents
            }
        }
    }
?>
<?php include_some_header(); ?>
    <tag>...</tag>
    <!-- some HTML -->
<?php //some code ?>
    <tag>...</tag>
    <!-- some more HTML -->
<?php //some code ?>
(摘自答案)

另一种方法是打开文件、写入文件并保存。但我想我一定是这样使用了
str\u replace
preg\u replace

$fname = "demo.txt";
$fhandle = fopen($fname,"r");
$content = fread($fhandle,filesize($fname));

$content = str_replace("oldword", "newword", $content);

$fhandle = fopen($fname,"w");
fwrite($fhandle,$content);
fclose($fhandle);
(摘自第页)

我到处都读到
str_replace
preg_replace
是有风险的,因为我试图编辑各种DOM元素,而不是特定的字符串/元素。我猜下面的代码接近我想要实现的目标,但我真的不能相信它

$replace_with = 'id="myID">' . $replacement_content . '</';
if ($updated = preg_replace('#id="myID">.*?</#Umsi', $replace_with, $file)) {   
    // write the contents of $file back to index.php, and then refresh the page.
    file_put_contents('file.php', $updated);
}

$replace_为='id=“myID”>'$替换内容。“* 首先,您不希望使用正则表达式函数进行HTML解析是正确的。看看答案

我将在假设您致力于在解释PHP文件之前在服务器端检索PHP文件的想法的情况下回答这个问题。您的方法现在有一个问题,因为您似乎觉得可以通过URL参数检索源PHP文件,但这就是结果的位置(解释的PHP)。所以要小心,你的结构是你想要的

我假设PHP文件的结构如下:

<?php
    $data = json_decode(stripslashes($_POST['data']));
    $count = 0;
    foreach ($data as $i => $array) {
        if (!is_array($array) && $count == 0){
            $count = 1;
            // $array = file url
        }
        elseif (is_array($array)) {
            foreach($array as $i => $content){
                // $array[0] = id's
                // $array[1] = contents
            }
        }
    }
?>
<?php include_some_header(); ?>
    <tag>...</tag>
    <!-- some HTML -->
<?php //some code ?>
    <tag>...</tag>
    <!-- some more HTML -->
<?php //some code ?>

...
...
您现在的问题是不能使用HTML阅读器(和写入器),因为您的文件不是HTML。我的答案是,您应该重新构造代码,将模板语言与业务逻辑分离。从一些开始。之后,您将能够在没有代码的情况下打开模板,并使用DOM解析器和编写器写回模板


当前设置中唯一的替代方法是使用替换功能,如中所示。很难看。它可能会破裂。但这绝对不是不可能的在用自己的代码编写自己的代码之前进行备份

您是否考虑过将PHP代码与HTML分开?例如,使用某种模板语言?将标记从代码中分离可以使问题变得更简单,并使您的未来更加光明。我将出现在不同页面上的HTML部分分开,例如页眉或页脚,但我不认为页面的内容是唯一的。它类似于:PHPfile(PHPheader-HTML内容-PHP页脚)。这是一件坏事吗?这样我就可以避免为内容制作另一个文档,对吗?顺便说一句,我有点搞不懂为什么要从一个URL获取一个文件。假设您是在服务器端检索文件,否则它将只是用JS对PHP(在本例中为HTML)进行删减,我将从客户端获取文件url并将其发送到服务器。有没有更好的方法来获取页面?这不是更好或更糟的问题,而是您是否想要替换解释的结果(HTML)或是否想要编辑PHP(预呈现)。你能澄清一下吗?让我们进入模板语言!谢谢你的回答!唯一一件还不清楚的事情是,我是如何获得编辑后的html部分的位置的,在执行此操作时,它包含在其中。不过,您的PHP文件也应该会出现这个问题!:)