PHP搜索和替换页面

时间:2011-04-23 19:17:18

标签: php preg-replace domdocument

我试图找到一种方法来搜索php中的页面来替换表单元素的名称。

我想我应该解释一下。我正在为一个朋友做一份工作,我想制作一个简单的数据库更新程序,它非常强大并且可以承受添加元素而不需要人们对php或数据库了解很多。

简而言之,我想搜索一个表单并用相应的数据库表键名替换所有name =“%name%”,这样我就可以使用一个简单的foreach方法来更新表。

所以我看着DOMDocument元素打开一个html页面并用相应的表键替换里面的每个表单名称,但我不确定我是否可以用loadHTML文件打开一个php页面。并且,如果我可以打开一个php页面,打开自己会导致无限循环?或者它只是解析html,好像它正在查看客户端的HTML?

有什么办法可以做我想要的吗?如果没有,那没关系,我只是让它变得不那么棒了,但我只是想知道。

1 个答案:

答案 0 :(得分:3)

这是完全可行的。

DOMDocument可能是此任务的理想(本机)工具,但您可能希望查看DOMDocument::loadHTML()方法而不是loadHTMLfile()方法。

要将已处理的PHP页面转换为字符串,您可以使用CURLfile_get_contents()或类似替代方案请求页面。这涉及发出额外的请求并添加特定的控制逻辑以避免无限循环。

更好的选择可能是使用output buffering,这是一个简单的示例,我已经掌握了如何替换<title>标记的内容:

<?php

ob_start();

echo '<title>Original Title</title>';

/*    get and delete current buffer      &&  start a new buffer */
if ((($html = ob_get_clean()) !== false) && (ob_start() === true))
{
    echo preg_replace('~<title>([^<]*)</title>~i', '<title>NEW TITLE</title>', $html, 1);
}

?>

我正在使用preg_replace(),但您在调整它以使用DOMDocument节点时应该没有任何问题。还值得注意的是,在将任何标题/内容发送到浏览器之前必须存在ob_start()调用,这包括会话cookie等。

这应该让你去,如果你需要更多的帮助,请告诉我。


通用DOMDocument示例:

<?php

ob_start(); // This must be the very first thing.

echo '<html>'; // Start of HTML.
echo '...'; // Your inputs and so on.
echo '</html>'; // End of HTML.

// Final processing, the $html variable will hold all output so far.
if ((($html = ob_get_clean()) !== false) && (ob_start() === true))
{
    $dom = new DOMDocument();

    $dom->loadHTML($html); // load the output HTML

    /* your specific search and replace logic goes here */

    echo $doc->saveHTML(); // output the replaced HTML
}

?>