我想使用整洁的插件但只能用于一个字符串。我正在使用的代码是:
tidy_repair_string($string);
我的问题是这个脚本位于一个文件中,我只需要使用一次就可以包含他。
但整理重复的html,正文,标题标签(文件的常规标签)。
如何在不返回html等的情况下验证我的字符串?
示例:如果我的字符串为<b><s>Text</b>
,我希望整齐只返回<b><s>Text</s></b>
不是:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<title></title>
</head>
<body>
<b><s>Text</s></b>
</body>
</html>
谢谢!
答案 0 :(得分:0)
也许这有效。如果没有,请参阅http://tidy.sourceforge.net/docs/quickref.html#output-html 了解更多选择
$string = tidy_repair_string($string, array(
'output-html' => false,
'doctype' => false));
答案 1 :(得分:0)
正如您在问题中已经提到的,Tidy对完整的HTML文档进行操作,因此修复过的文档包含(如果已配置)doctype但始终是head部分。
您正在寻找一个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>
这比你要求的更多,我只是将它作为一个额外的例子添加,例如查看字符串中的所有标签是否都已关闭。