You can also use this function to repair xml, for example if stray ampersands etc are breaking it:
<?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 теперь допускают значение null.
|
| 8.0.0 |
Функция больше не принимает параметр useIncludePath.
|
Пример #1 Пример использования tidy::repairString()
<?php
ob_start();
?>
<html>
<head>
<title>тест</title>
</head>
<body>
<p>ошибка</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>тест</title> </head> <body> <p>ошибка</p> </body> </html>
You can also use this function to repair xml, for example if stray ampersands etc are breaking it:
<?php
$xml = tidy_repair_string($xml, array(
'output-xml' => true,
'input-xml' => true
));
?>Using tidy is very simple to fix a broken ods/odt documentI wrote the following code to be run from command line<?php$zip = new ZipArchive();if ($zip->open($argv[1])) { $fp = $zip->getStream('content.xml'); //file inside archive if(!$fp) die("Error: can't get stream to document file"); $stat = $zip->statName('content.xml'); $buf = ""; //file buffer ob_start(); //to capture CRC error message 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);}?>save it to a file called fixdoc and invoke as:php fixdoc yourbrokendocfor your safety, please work on a copy of your doc.The docs referenced at http://tidy.sourceforge.net/docs/quickref.html above state that the configuration option 'sort-attributes' is an enumeration of 'none' and 'alpha', thereby specifying that strings of either form are the acceptable values. This may not be the case, however - on my system, the option was not honored until I set it to true. This may also be the case with other options, so experiment a bit. The output of tidy::getConfig() may be useful in this regard.