正如你在你的問題已經提到的,整潔運行在一個完整的HTML文檔,所以修復的一個包含(如果配置)一個文檔類型,但總是頭部分。
您正在尋找一個HTML片段,它不是一個完整的HTML文檔。
這種差異化已經包含解決方案:將HTML片段注入爲正文,將其作爲文檔修復,然後僅以字符串形式獲取正文的子體。完成。這是一個很短,但已經開始着手例如:
/* Tidy example: Clean a HTML fragment */
$fragment = '<b><s>Text</b>';
$tidy = new Tidy;
$tidy->parseString($fragment);
$tidy->cleanRepair();
$result = implode('', (array) $tidy->body()->child); // <b><s>Text</s></b>
如果你想走得更遠一步,驗證HTML片段(例如只有有效的HTML代碼和所有標籤關閉,看還有tidy configuration),您可以前綴它只有最低限度的HTML,因此錯誤和警告屬於片段本身的責任。可以通過tidy::getStatus()
然後獲得的狀態:
/* Tidy example: Validate a HTML fragment (4 samples) */
$fragments = [
['Valid fragment', '<b><s>Text</s></b>'],
['Unclosed tag', '<b><s>Text</b>'],
['Unknown tag', '<unknown></unknown>'],
['Unfinished attribute', '<a href=">link</a>'],
];
$tidy = new Tidy;
foreach ($fragments as list($title, $fragment)) {
$tidy->parseString("<!DOCTYPE html><title>HTML fragment</title><body>" . $fragment);
$status = $tidy->getStatus();
$tidy->cleanRepair();
$result = implode('', (array)$tidy->body()->child);
printf("%s - Status: %d\n HTML: %s\n Repaired: %s\n", $title, $status, $fragment, $result);
}
這個例子將提供以下輸出展示的getType
在默認配置返回值的含義:
Valid fragment - Status: 0
HTML: <b><s>Text</s></b>
Repaired: <b><s>Text</s></b>
Unclosed tag - Status: 1
HTML: <b><s>Text</b>
Repaired: <b><s>Text</s></b>
Unknown tag - Status: 2
HTML: <unknown></unknown>
Repaired:
Unfinished attribute - Status: 2
HTML: <a href=">link</a>
Repaired: <a href="%3Elink%3C/a%3E"></a>
這比你所要求,我只是把它作爲一個額外的例子加入,例如查看字符串中的所有標籤是否關閉。
它沒有。我會嘗試在sourceforge上查看。謝謝。 – 2013-03-27 07:36:16