[php] tidy, создание кроссбраузерного кода

Дмитрий
На сайте с 23.08.2006
Offline
199
1377

Добрый вечер

Суть такова, хочу вот такой код на входе:

<ul><li><a href="#">1<ul></ul></li><li><a href="#">2</a><ul><li><a href="#">2.1</a><li><a href="#">2.2</a></li></ul></li></ul>

Превратить в такой на выходе:

    <ul>

<li>
<a href="#">1</a>
</li>
<li>
<a href="#">2</a>
<ul>
<li>
<a href="#">2.1</a>
</li>
<li>
<a href="#">2.2</a>
</li>
</ul>
</li>
</ul>

Собственно закрывать теги, убивать пустые теги и т.д. Для этого решил использовать tidy:

$buffer = '<ul><li><a href="#">1</a><ul></ul></li><li><a href="#">2</a><ul><li><a href="#">2.1</a></li><li><a href="#">2.2</a></li></ul></li></ul>';


$config = array('indent' => true,
'output-html' => false,
'output-xhtml' => false,
'output-xml' => false,
'wrap' => 200);

$tidy = tidy_parse_string($buffer, $config, 'UTF8');

$tidy->cleanRepair();

echo $tidy;

В ответ мне выдается полноценный html документ, то есть с доктайпом, хиадом, боди итдитп. Можно ли добавить какой-то параметр в конфиг, что бы на выходе был подправленный, только исходный html код.

Разрабатываю и автоматизирую на php http://jonnyb.ru/
Dreammaker
На сайте с 20.04.2006
Offline
570
#1

Может попробовать опосля обработать

http://ua.php.net/manual/ru/function.tidy-get-body.php и вырезать регуляркой, то что между <body></body> или вообще сразу из полученного документа вырезать.

Дмитрий
На сайте с 23.08.2006
Offline
199
#2

Спасибо, буду тогда сразу регуляркой выдирать.

Rulin
На сайте с 16.01.2008
Offline
133
#3
JonnyB:

Суть такова, хочу вот такой код на входе:

Ну так ты ему и скажи что у тебя на входе не html, а произвольная фигня (т.е. xml) :)

параметр input-xml


$config = array(
'input-xml' => true,
'indent' => true,
'wrap' => 200
);
Bitcoin Debit Card
Дмитрий
На сайте с 23.08.2006
Offline
199
#4

Rulin, head и body остаются...

[Удален]
#5

так выдери регуляркой :) тут работы то 1 минута.

Rulin
На сайте с 16.01.2008
Offline
133
#6
JonnyB:
Rulin, head и body остаются...

У меня ничего не остается выдается только то что было на входе. Какие входные данные?

вот мой полный листинг кода:

<?php


$buffer = '<ul><li><a href="#">1</a><ul></ul></li><li><a href="#">2</a><ul><li><a href="#">2.1</a></li><li><a href="#">2.2</a></li></ul></li></ul>';

$config = array(
'input-xml' => true,
'indent' => true,
'wrap' => 200
);

$tidy = tidy_parse_string($buffer, $config, 'UTF8');

$tidy->cleanRepair();

echo "<!--start-->\r\n".$tidy."<!--finish-->";
?>

Результат:

<!--start-->

<ul>
<li>
<a href="#">1</a>
<ul></ul>
</li>
<li>
<a href="#">2</a>
<ul>
<li>
<a href="#">2.1</a>
</li>
<li>
<a href="#">2.2</a>
</li>
</ul>
</li>
</ul>
<!--finish-->
Дмитрий
На сайте с 23.08.2006
Offline
199
#7

Rulin, спасибо, помогло. Что-то до этого неполучалось. Только вот пустые теги остаются. Темку мона закрывати :)

Дмитрий
На сайте с 23.08.2006
Offline
199
#8

Кстати, теги body, head он добавлял из-за параметра 'indent' => true в конфиге...

Rulin
На сайте с 16.01.2008
Offline
133
#9
JonnyB:
Только вот пустые теги остаются.

Ну это норма.

JonnyB:
Кстати, теги body, head он добавлял из-за параметра 'indent' => true в конфиге...

С чего такой вывод? в приведенном мной листинге кода 'indent' => true, и при этом некакие body и head не добавляются.

Body и head а также остальные, обязательные для html формата теги (html, head, title, body, doctype) он добавляет, если думает что на входе html данные (это у него по умолчанию), а если ему указать что у тебя на входе xml (параметр input-xml) то он этого делать не будет

p.s.

А еще неплохобы переодически почитывать мануал http://tidy.sourceforge.net/docs/quickref.html

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий