我正在尝试使用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
}
}
}
?>
正如您所看到的,我将变量包装在一个数组中,因此可以一次编辑多个元素。 我一直在寻找解决方案几个小时,但无法下定决心,并告诉我们什么是最佳/可能的解决方案。
我尝试创建一个新的DOMElement并在html中加载,但在处理PHP文件时,这个解决方案是不可能的,因为它无法保存php文件:
$html = new DOMDocument();
$html->loadHTMLFile('file.php');
$html->getElementById('myId')->nodeValue = 'New value';
$html->saveHTMLFile("foo.html");
(来自this回答)
打开文件,写入文件并保存文件是另一种方法。但我想我必须以这种方式使用str_replace
或preg_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);
(来自this页)
我到处都读到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);
}
(来自this回答)
简而言之:什么是最佳解决方案,或者甚至可以仅提供id
来编辑不同文件类型的HTML元素内容?
许愿步骤:
从url
使用id
替换它的内容
答案 0 :(得分:1)
首先,你不想使用正则表达式函数进行HTML解析。请参阅答案here。
我将在假设您致力于在解释之前在服务器端检索PHP文件的假设下回答这个问题。您的方法现在存在问题,因为您似乎认为您可以通过URL参数检索源PHP文件 - 但这是结果的位置(解释为PHP)。所以要小心你的结构能做你想做的事。
我假设PHP文件的结构如下:
<?php include_some_header(); ?>
<tag>...</tag>
<!-- some HTML -->
<?php //some code ?>
<tag>...</tag>
<!-- some more HTML -->
<?php //some code ?>
您现在的问题是您无法使用HTML阅读器(和编写器),因为您的文件不是HTML。我的答案是你应该重构代码,将模板语言与业务逻辑分开。开始使用templating language。之后,您将能够在没有代码的情况下打开模板,并使用DOM解析器和编写器回写模板。
您当前设置中唯一的替代方法是使用this answer中找到的替换功能。它很丑。它可能会破裂。但这绝对不是不可能的。 在使用您自己的代码编写自己的代码之前进行备份 。