DOMDocument::saveHTMLFile

(PHP 5, PHP 7, PHP 8)

DOMDocument::saveHTMLFile 使用 HTML 格式将内部文档转储到文件

描述

public DOMDocument::saveHTMLFile(string $filename): int|false

从 DOM 表示创建 HTML 文档。此函数通常在从头开始构建新的 DOM 文档后调用,如下面的示例所示。

参数

filename

保存的 HTML 文档的路径。

返回值

返回写入的字节数,如果发生错误,则返回 false

示例

示例 #1 将 HTML 树保存到文件

<?php

$doc
= new DOMDocument('1.0');
// 我们想要一个漂亮的输出
$doc->formatOutput = true;

$root = $doc->createElement('html');
$root = $doc->appendChild($root);

$head = $doc->createElement('head');
$head = $root->appendChild($head);

$title = $doc->createElement('title');
$title = $head->appendChild($title);

$text = $doc->createTextNode('This is the title');
$text = $title->appendChild($text);

echo
'Wrote: ' . $doc->saveHTMLFile("/tmp/test.html") . ' bytes'; // Wrote: 129 bytes

?>

参见

添加注释

用户贡献的注释 3 则注释

RiKdnUA at mail dot ru
11 年前
saveHTMLFile() 始终以 UTF-8 编码保存文件。即使 DOMDocument->encoding 明确规定与 UTF-8 编码不同。所有“非拉丁”字符都将转换为 HTML 实体。在 PHP 5.2.9-2 和 PHP 5.2.17 中测试。示例

<?php
$document
=new domDocument('1.0', 'WINDOWS-1251');
$document->loadHTML('<html><head><title>Russian language</title></head><body>Русский язык</body></html>');
$document->formatOutput=true;
$document->encoding='WINDOWS-1251';
echo
"Записано байт. Recorded bytes: ".$document->saveHTMLFile('html.html');
?>

该方法以 UTF-8 编码记录了文件。文件 html.html 的内容

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Russian language</title>
</head>
<body>Ðóññêèé ÿçûê</body>
</html>
naebeth at hotmail dot NOSPAM dot com
11 年前
文档中未提及的是,使用 DOMDocument::saveHTMLFile() 将自动覆盖现有文件的内容 - 不会发出任何通知、警告或错误。

在使用此函数之前,请确保检查文件名,以免意外覆盖重要文件。

示例
<?php

$file
= fopen('test.html', 'w');
fwrite($file, 'this is some text');
fclose($file);

$doc = new DOMDocument();
$doc->formatOutput = true;
$doc->loadHTML('<html><head><title>Test</title></head><body></body></html>');
$doc->saveHTMLFile('test.html');

// test.html
/*
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test</title>
</head>
<body></body>
</html>
*/

?>

如果您使用 DOMDocument 对象动态生成一系列页面,请确保您还使用无法轻易与现有文件/文件夹混淆的内容动态生成文件或目录名称,或在保存之前检查所需路径是否存在,以免意外删除以前的文件。
deep42thouSPAMght42 at y_a_h_o_o dot com
13 年前
我愚蠢地认为该函数等效于
<?php
file_put_contents
($filename, $document->saveHTML());
?>
但生成的 HTML 有所不同
<?php
$doc
= new DOMDocument();
$doc->loadHTML(
'<html><head><title>Test</title></head><body></body></html>'
);
$doc->encoding = 'iso-8859-1';

echo
$doc->saveHTML();
#<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
#<html>
#<head><title>Test</title></head>
#<body></body>
#</html>

$doc->saveHTMLFile('output.html');
#<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
#<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Test</title></head><body></body></html>

?>
请注意,saveHTMLFile() 添加了一个 UTF-8 元标记,即使文档编码为 ISO-8859-1。
To Top