tidy::repairString
tidy_repair_string
(PHP 5, PECL tidy >= 0.7.0)
tidy::repairString -- tidy_repair_string — Repair a string using an optionally provided configuration file
Description
Object oriented style
Procedural style
Repairs the given string.
Parameters
-
data
-
The data to be repaired.
-
config
-
The config
config
can be passed either as an array or as a string. If a string is passed, it is interpreted as the name of the configuration file, otherwise, it is interpreted as the options themselves.Check » http://tidy.sourceforge.net/docs/quickref.html for an explanation about each option.
-
encoding
-
The
encoding
parameter sets the encoding for input/output documents. The possible values for encoding are: ascii, latin0, latin1, raw, utf8, iso2022, mac, win1252, ibm858, utf16, utf16le, utf16be, big5, and shiftjis.
Return Values
Returns the repaired string.
Examples
Example #1 tidy::repairString() example
<?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;
?>
The above example will output:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> <html> <head> <title>test</title> </head> <body> <p>error</p> </body> </html>
Notes
Note: The optional parameters
config
andencoding
were added in Tidy 2.0.
See Also
- tidy::parseFile() - Parse markup in file or URI
- tidy::parseString() - Parse a document stored in a string
- tidy::repairFile() - Repair a file and return it as a string
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Другие базовые расширения
- Tidy
- Функция tidy::body() - Возвращает объект tidyNode, начиная с тега <body> разобранного tidy-дерева
- Функция tidy::cleanRepair() - Выполнить настроенную очистку и восстановление разобранной разметки
- Функция tidy::__construct() - Создает новый tidy-объект
- Функция tidy::diagnose() - Запуск настроенной диагностики для разобранной и восстановленной разметки
- Функция tidy::$errorBuffer() - Возвращает предупреждения и ошибки, возникшие при разборе указанного документа
- Функция tidy::getConfig() - Получает текущую конфигурацию Tidy
- Функция tidy::getHtmlVer() - Получает обнаруженную HTML версию для указанного документа
- Функция tidy::getOpt() - Возвращает значение указанного параметра конфигурации для документа tidy
- Функция tidy::getoptdoc() - Возвращает описание для опции с указанным названием
- Функция tidy::getRelease() - Получить дату релиза (версию) для библиотеки Tidy
- Функция tidy::getStatus() - Получает статус указанного документа
- Функция tidy::head() - Возвращает объект tidyNode, начиная с тега <head> разобранного tidy-дерева
- Функция tidy::html() - Возвращает объект tidyNode, начиная с тега <html> разобранного tidy-дерева
- Функция tidy::isXhtml() - Определяет, является ли документ XHTML-документом
- Функция tidy::isXml() - Определяет, является ли документ общим XML-документом (не HTML/XHTML)
- Функция tidy::parseFile() - Разбор разметки в файле или URI
- Функция tidy::parseString() - Разбор документа, хранимого в строке
- Функция tidy::repairFile() - Воcстанавливает разметку файла и возвращает его в виде строки
- Функция tidy::repairString() - Восстанавливает строку, используя по возможности конфигурационный файл
- Функция tidy::root() - Возвращает объект tidyNode, представляющий вершину разобранного tidy-дерева
Коментарии
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
));
?>
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.
Using tidy is very simple to fix a broken ods/odt document
I 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 yourbrokendoc
for your safety, please work on a copy of your doc.