我试图找到一种方法来搜索php中的页面来替换表单元素的名称。
我想我应该解释一下。我正在为一个朋友做一份工作,我想制作一个简单的数据库更新程序,它非常强大并且可以承受添加元素而不需要人们对php或数据库了解很多。
简而言之,我想搜索一个表单并用相应的数据库表键名替换所有name =“%name%”,这样我就可以使用一个简单的foreach方法来更新表。
所以我看着DOMDocument元素打开一个html页面并用相应的表键替换里面的每个表单名称,但我不确定我是否可以用loadHTML文件打开一个php页面。并且,如果我可以打开一个php页面,打开自己会导致无限循环?或者它只是解析html,好像它正在查看客户端的HTML?
有什么办法可以做我想要的吗?如果没有,那没关系,我只是让它变得不那么棒了,但我只是想知道。
答案 0 :(得分:3)
这是完全可行的。
DOMDocument
可能是此任务的理想(本机)工具,但您可能希望查看DOMDocument::loadHTML()
方法而不是loadHTMLfile()
方法。
要将已处理的PHP页面转换为字符串,您可以使用CURL,file_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
}
?>