快速提问,有没有办法明确指出要从php中的ob_get_contents()中提取哪些内容。
我有以下代码..但仍然没有运气..
$no = mt_rand(100,10000);
$page = ob_get_contents();
$custompage = preg_match('/<body[^>]+./','', $page);
ob_end_clean();
$filename1 = $no.'doc.html';
$f = fopen('./view/'.$filename1, "w");
fwrite($f, $custompage);
fclose($f);
我想要的是只选择从php脚本生成的html(在body标签之间)并将其保存到文件中。保存文件有效。
任何帮助,将不胜感激。
谢谢
答案 0 :(得分:1)
简单的,
$match = "";
preg_match("/<body.+<\/body>/is", $page, $custompage);
print_r($custompage);
答案 1 :(得分:1)
正则表达式可能对此任务有点过分。假设您输出的页面中只有一个<body>
和一个</body>
子字符串,这是合乎逻辑的。
在这种情况下,我们所要做的就是确定这两者的字符串位置,并启动substr
:
$from = strpos($page, '<body>');
$to = strpos($page, '</body>');
$contents = substr($page, $from, $to - $from);
但是,这会包含<body>
和</body>
标记。
答案 2 :(得分:0)
您可以通过DOM API执行此操作:
只需以这种方式加载您的页面代码:
$dom = new DOMDocument();
$dom->loadHTML($page);
然后获取正文&#34;节点&#34; (因为只有一个body元素,我们可以使用item(0)
):
$body = $dom->getElementsByTagName('body')->item(0);
然后您可以以规范化形式输出正文:
echo $body->C14N();
或者只是以这种方式输出正文XML代码:
echo $dom->saveXML($body);
只需使用file_put_contents
将其保存在您想要的任何位置,以便您的代码可以只是:
$dom = new DOMDocument();
$dom->loadHTML($page);
file_put_contents(
"myfile.html",
$dom->getElementsByTagName('body')->item(0)->C14N()
);
这将保留body
元素,因为DOM文档必须有根,但您可以通过存储每个子节点来摆脱它:
$dom = new DOMDocument();
$dom->loadHTML($page);
$content = "";
foreach ($dom->getElementsByTagName('body')->item(0)->childNodes as $child) {
$content .= $dom->saveXML($child);
}
file_put_contents("myfile.html", $content);
代码比其他解决方案多一些,但据我所知,这样做会更加干净。