您也可以使用此函数修复 XML,例如,如果出现错误的&号等导致 XML 出现错误
<?php
$xml = tidy_repair_string($xml, array(
'output-xml' => true,
'input-xml' => true
));
?>
(PHP 5, PHP 7, PHP 8, PECL tidy >= 0.7.0)
tidy::repairString -- tidy_repair_string — 使用可选提供的配置文件修复字符串
面向对象风格
$string
, array|string|null $config
= null
, ?string $encoding
= null
): string|false过程式风格
$string
, array|string|null $config
= null
, ?string $encoding
= null
): string|false修复给定的字符串。
string
要修复的数据。
config
配置 config
可以作为数组或字符串传递。如果传递的是字符串,则将其解释为配置文件的名称,否则将其解释为选项本身。
查看 » http://api.html-tidy.org/#quick-reference 以了解每个选项的解释。
encoding
参数 encoding
设置输入/输出文档的编码。编码的可能值为:ascii
、latin0
、latin1
、raw
、utf8
、iso2022
、mac
、win1252
、ibm858
、utf16
、utf16le
、utf16be
、big5
和 shiftjis
。
返回修复后的字符串,或在失败时返回 false
。
版本 | 描述 |
---|---|
8.0.0 | tidy::repairString() 现在是静态方法。 |
8.0.0 |
config 和 encoding 现在是可为空的。 |
8.0.0 | 此函数不再接受 useIncludePath 参数。 |
范例 #1 tidy::repairString() 示例
<?php
ob_start();
?>
<html>
<head>
<title>test</title>
</head>
<body>
<p>error</i>
</body>
</html>
<?php
$buffer = ob_get_clean();
$tidy = new tidy();
$clean = $tidy->repairString($buffer);
echo $clean;
?>
上面的例子将输出
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> <html> <head> <title>test</title> </head> <body> <p>error</p> </body> </html>
您也可以使用此函数修复 XML,例如,如果出现错误的&号等导致 XML 出现错误
<?php
$xml = tidy_repair_string($xml, array(
'output-xml' => true,
'input-xml' => true
));
?>
使用 Tidy 可以很容易地修复损坏的 ODS/ODT 文档
我编写了以下代码,以便从命令行运行
<?php
$zip = new ZipArchive();
if ($zip->open($argv[1])) {
$fp = $zip->getStream('content.xml'); // 压缩包中的文件
if(!$fp)
die("Error: can't get stream to document file");
$stat = $zip->statName('content.xml');
$buf = ""; // 文件缓冲区
ob_start(); // 捕获 CRC 错误消息
while (!feof($fp)) {
$buf .= fread($fp, 2048);
}
$s = ob_get_contents();
ob_end_clean();
fclose($fp);
$zip->close();
$config = array(
'indent' => true,
'clean' => true,
'input-xml' => true,
'output-xml' => true,
'wrap' => false
);
$tidy = new Tidy();
$xml = $tidy->repairstring($buf, $config);
$array=split("\n",$xml);
$file=tempnam("/tmp","xml");
$fp=fopen($file,"rw+");
foreach ($array as $key=>$value) {
fwrite($fp,trim($value),strlen(trim($value)));
if ($key==0) {
fwrite($fp,"\n");
}
}
fclose($fp);
if ($zip->open($argv[1]) === TRUE) {
$zip->deleteName('content.xml');
$zip->addFile($file, 'content.xml');
$zip->close();
echo 'recovery complete';
} else {
echo 'recovery failed';
}
unlink($file);
}
?>
将代码保存到名为 fixdoc 的文件中,并使用以下命令调用:
php fixdoc yourbrokendoc
为了安全起见,请在操作之前备份您的文档。
在上面的http://tidy.sourceforge.net/docs/quickref.html中提到的文档中,配置选项 'sort-attributes' 的枚举值为 'none' 和 'alpha',这意味着只有这两种形式的字符串是可接受的值。但是,这可能并不总是正确 - 在我的系统上,只有将选项设置为 true 后,它才会被执行。其他选项也可能存在这种情况,因此请进行一些实验。tidy::getConfig() 的输出在这方面可能会有所帮助。