PHP Conference Japan 2024

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 則註解

8
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>俄語</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>俄語</title>
</head>
<body>Ðóññêèé ÿçûê</body>
</html>
0
naebeth at hotmail dot NOSPAM dot com
12 年前
文件中沒有提到的是,使用 DOMDocument::saveHTMLFile() 會在沒有通知、警告或錯誤拋出的情況下,自動覆寫現有檔案的內容。

請務必在使用此函式之前檢查檔案名稱,以免意外覆寫重要檔案。

範例
<?php

$file
= fopen('test.html', 'w');
fwrite($file, '這是一些文字');
fclose($file);

$doc = new DOMDocument();
$doc->formatOutput = true;
$doc->loadHTML('<html><head><title>測試</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>測試</title>
</head>
<body></body>
</html>
*/

?>

如果您使用 DOMDocument 物件動態產生一系列頁面,請確保您也動態產生檔案或目錄名稱,使用不容易與現有檔案/資料夾混淆的名稱,或在儲存之前檢查所需的路徑是否已存在,以免意外刪除先前的檔案。
-1
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>

?>
請注意,即使文件編碼為 ISO-8859-1,saveHTMLFile() 仍會加入一個 UTF-8 的 meta 標籤。
To Top