Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > Чистка ХТМЛ кода


Автор: Luceus 7.6.2006, 11:55
Есть следующий ХТМЛ-код:

Код

<TABLE BORDER CELLSPACING=0 class="pricelist1">
<TR>
<TD BORDERCOLOR=#ffffff color="black">&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff><FONT SIZE=3>срок: 17.04.06 оплачен</FONT>
<TD BORDERCOLOR=#ffffff>dd sert
ert
<i>asdf</i>
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD ALIGN=RIGHT BORDERCOLOR=#ffffff><I><B>&nbsp;</B></I>
<TD ALIGN=RIGHT BORDERCOLOR=#ffffff><I><B>&nbsp;</B></I>
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
</TR>
<TR>
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD ALIGN=RIGHT BORDERCOLOR=#ffffff><FONT SIZE=5><I><B>&nbsp;</B></I></FONT>
<TD ALIGN=RIGHT BORDERCOLOR=#ffffff><FONT SIZE=5><I><B>&nbsp;</B></I></FONT>
<TD ALIGN=RIGHT BORDERCOLOR=#ffffff><FONT SIZE=5><I><B>ПП "ПОЛ_САН"</B></I></FONT>
</TR>
<TR>
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD ALIGN=RIGHT VALIGN=CENTER BORDERCOLOR=#ffffff><I><U>05.06.06 16:35:04 (Соколов)</U></I>
</TR>
<TR>
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD ALIGN=RIGHT BORDERCOLOR=#ffffff><FONT SIZE=3><B>&nbsp;</B></FONT>
<TD ALIGN=RIGHT BORDERCOLOR=#ffffff><FONT SIZE=3><B>Валюта: грв</B></FONT>
<TD ALIGN=RIGHT BORDERCOLOR=#ffffff><FONT SIZE=3><B>&nbsp;</B></FONT>
<TD ALIGN=RIGHT BORDERCOLOR=#ffffff><FONT SIZE=3><B>&nbsp;</B></FONT>
<TD ALIGN=RIGHT BORDERCOLOR=#ffffff><FONT SIZE=3><B>&nbsp;</B></FONT>
</TR>
<TR>
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD ALIGN=CENTER VALIGN=CENTER BORDERCOLOR=#ffffff COLSPAN=9><B>БАЛАНС
07.12.05 - 05.06.06</B>
</TR>
<TR>
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD ALIGN=CENTER BORDERCOLOR=#ffffff COLSPAN=9><FONT SIZE=4><B>"Бочкаревы","ЧП Бочкарев В.В.","ЧП Бочкарева Т.В."</B></FONT>
</TR>
<TR>
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff><FONT SIZE=4><B>&nbsp;</B></FONT>
<TD BORDERCOLOR=#ffffff><FONT SIZE=4><B>&nbsp;</B></FONT>
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD BORDERCOLOR=#ffffff>&nbsp;
</TR>
<TR>
<TD VALIGN=CENTER BORDERCOLOR=#ffffff>&nbsp;
<TD ALIGN=CENTER VALIGN=CENTER BGCOLOR=#c0dcc0 COLSPAN=4 ROWSPAN=2><B>Документ</B>
<TD ALIGN=CENTER VALIGN=CENTER BGCOLOR=#c0dcc0 ROWSPAN=2><B>Состояние документа</B>
<TD ALIGN=CENTER VALIGN=CENTER BGCOLOR=#c0dcc0 COLSPAN=4><B>ПП "ПОЛ_САН"</B>
</TR>
<TR>
<TD VALIGN=CENTER BORDERCOLOR=#ffffff>&nbsp;
<TD ALIGN=CENTER VALIGN=CENTER BGCOLOR=#c0dcc0><B>Отгзузка</B>
<TD ALIGN=CENTER VALIGN=CENTER BGCOLOR=#c0dcc0><B>Оплата</B>
<TD ALIGN=CENTER VALIGN=CENTER BGCOLOR=#c0dcc0><B>Остаток товарного кредита</B>
<TD ALIGN=CENTER VALIGN=CENTER BGCOLOR=#c0dcc0><B>Остаток всей оплаты</B>
</TR>
<TR>
<TD VALIGN=CENTER BORDERCOLOR=#ffffff>&nbsp;
<TD VALIGN=CENTER><FONT SIZE=3><B>&nbsp;</B></FONT>
<TD VALIGN=CENTER><FONT SIZE=3><B>&nbsp;</B></FONT>
<TD VALIGN=CENTER><FONT SIZE=3><B>&nbsp;</B></FONT>
<TD VALIGN=CENTER><FONT SIZE=3><B>&nbsp;</B></FONT>
<TD VALIGN=CENTER><FONT SIZE=3><B>&nbsp;</B></FONT>
<TD VALIGN=CENTER><FONT SIZE=3><B>&nbsp;</B></FONT>
<TD VALIGN=CENTER><FONT SIZE=3><B>&nbsp;</B></FONT>
<TD VALIGN=CENTER><FONT SIZE=3><B>&nbsp;</B></FONT>
<TD VALIGN=CENTER><FONT SIZE=3><B>&nbsp;</B></FONT>
</TR>
<TR>
<TD BORDERCOLOR=#ffffff>&nbsp;
<TD>&nbsp;
<TD>&nbsp;
<TD>&nbsp;
<TD>&nbsp;
<TD ALIGN=RIGHT COLSPAN=2><FONT SIZE=3><B>&nbsp;</B></FONT>
<TD ALIGN=RIGHT VALIGN=CENTER BGCOLOR=#fffbf0><FONT SIZE=3><B>&nbsp;</B></FONT>
<TD ALIGN=RIGHT VALIGN=CENTER BGCOLOR=#fffbf0><FONT SIZE=3><B>295'000.00</B></FONT>
<TD ALIGN=RIGHT VALIGN=CENTER BGCOLOR=#fffbf0><FONT SIZE=3><B>&nbsp;</B></FONT>
</TR>
<TR>
<TD VALIGN=CENTER BORDERCOLOR=#ffffff>&nbsp;
<TD VALIGN=CENTER><FONT SIZE=3><B>Входящее сальдо</B></FONT>
<TD VALIGN=CENTER><FONT SIZE=3><B>&nbsp;</B></FONT>
<TD VALIGN=CENTER><FONT SIZE=3><B>&nbsp;</B></FONT>
<TD VALIGN=CENTER><FONT SIZE=3><B>&nbsp;</B></FONT>
<TD ALIGN=RIGHT VALIGN=CENTER><FONT SIZE=3><B>&nbsp;</B></FONT>
<TD ALIGN=RIGHT VALIGN=CENTER><FONT SIZE=3><B>112'742.19</B></FONT>
<TD ALIGN=RIGHT VALIGN=CENTER><FONT SIZE=3><B>&nbsp;</B></FONT>
<TD ALIGN=RIGHT VALIGN=CENTER><FONT SIZE=2 COLOR=#808080>295'000.00</FONT>
<TD ALIGN=RIGHT VALIGN=CENTER><FONT SIZE=2 COLOR=#808080>772'626.04</FONT>
</TR>
<TR>
<TD VALIGN=CENTER BORDERCOLOR=#ffffff>&nbsp;
<TD VALIGN=CENTER><FONT SIZE=3>&nbsp;</FONT>
<TD VALIGN=CENTER><FONT SIZE=3>&nbsp;</FONT>
<TD VALIGN=CENTER COLSPAN=2><FONT SIZE=3>ЧП Бочкарев В.В.
Накладная на расход ТМЦ РК0350 (13.12.05)
доставка:   .  .</FONT>
<TD ALIGN=CENTER VALIGN=CENTER BGCOLOR=#c0dcc0><FONT SIZE=3>срок: 11.02.06
товарный кредит</FONT>
<TD ALIGN=RIGHT VALIGN=CENTER><FONT SIZE=3>60'750.58</FONT>
<TD ALIGN=RIGHT VALIGN=CENTER><FONT SIZE=3>&nbsp;</FONT>
<TD ALIGN=RIGHT VALIGN=CENTER><FONT SIZE=2 COLOR=#808080>182'257.81</FONT>
<TD ALIGN=RIGHT VALIGN=CENTER><FONT SIZE=2 COLOR=#808080>772'626.04</FONT>
</TR>
<TR>
<TD VALIGN=CENTER BORDERCOLOR=#ffffff>&nbsp;
<TD VALIGN=CENTER><FONT SIZE=3>&nbsp;</FONT>
<TD VALIGN=CENTER><FONT SIZE=3>&nbsp;</FONT>
<TD VALIGN=CENTER COLSPAN=2><FONT SIZE=3>ЧП Бочкарев В.В.
Накладная на расход ТМЦ РК0367 (13.12.05)
доставка:   .  .</FONT>
<TD ALIGN=CENTER VALIGN=CENTER BGCOLOR=#c0dcc0><FONT SIZE=3>срок: 11.02.06
товарный кредит</FONT>
<TD ALIGN=RIGHT VALIGN=CENTER><FONT SIZE=3>8'327.30</FONT>
<TD ALIGN=RIGHT VALIGN=CENTER><FONT SIZE=3>&nbsp;</FONT>
<TD ALIGN=RIGHT VALIGN=CENTER><FONT SIZE=2 COLOR=#808080>121'507.23</FONT>
<TD ALIGN=RIGHT VALIGN=CENTER><FONT SIZE=2 COLOR=#808080>772'626.04</FONT>
</TR>
<TR>
<TD VALIGN=CENTER BORDERCOLOR=#ffffff>&nbsp;
<TD VALIGN=CENTER><FONT SIZE=3>&nbsp;</FONT>
<TD VALIGN=CENTER><FONT SIZE=3>&nbsp;</FONT>
<TD VALIGN=CENTER COLSPAN=2><FONT SIZE=3>ЧП Бочкарев В.В.
Накладная на расход ТМЦ ЧП0006 (17.01.06)
доставка:   .  .</FONT>
<TD ALIGN=CENTER VALIGN=CENTER BGCOLOR=#dd9cb3><FONT SIZE=3>срок: 17.04.06
оплачен</FONT>
<TD ALIGN=RIGHT VALIGN=CENTER><FONT SIZE=3>144'412.75</FONT>
<TD ALIGN=RIGHT VALIGN=CENTER><FONT SIZE=3>&nbsp;</FONT>
<TD ALIGN=RIGHT VALIGN=CENTER><FONT SIZE=2 COLOR=#808080>113'179.93</FONT>
<TD ALIGN=RIGHT VALIGN=CENTER><FONT SIZE=2 COLOR=#808080>772'626.04</FONT>
</TR>
<TR>
<TD VALIGN=CENTER BORDERCOLOR=#ffffff>&nbsp;
<TD VALIGN=CENTER><FONT SIZE=3>&nbsp;</FONT>
<TD VALIGN=CENTER><FONT SIZE=3>&nbsp;</FONT>
<TD VALIGN=CENTER COLSPAN=2><FONT SIZE=3>ЧП Бочкарева Т.В.
Накладная на расход ТМЦ РК0046 (13.02.06)
доставка: 25.02.06</FONT>
<TD ALIGN=CENTER VALIGN=CENTER BGCOLOR=#dd9cb3><FONT SIZE=3>срок: 26.04.06
оплачен</FONT>


Нужно его подчистить от ненужной грязи. ХТМЛ экспортируется из 1С бухгалтерии.

Я написал на ПХП следующий код:

Код

<?
  $file = implode("", file("id1.html"));

  $file = preg_replace('/\r\n/', '', $file);

  $file = preg_replace('/<[\/]?(FONT|B|I|U)[^>]*>/i', '', $file);

  $file = preg_replace('/(<TD[^>]*>.*?)(<TR|<TD)/', '\\1</TD>\\2', $file);

//  $file = preg_replace('/&nbsp;/', '', $file);

  $search = array('/\sBORDERCOLOR=\#ffffff/',
          '/\sVALIGN=CENTER/'
                 );
  $replace = array('',
           ''
                  );

  $file = preg_replace($search, $replace, $file);


  echo $file;
?>


Работает наполовину. Не понятно, как все-таки закрыть теги <TD>, которые просто открываются но не закрываются автоматически.


Спасибо. 

Автор: xolod 7.6.2006, 14:44
Задача сводится к поиску после открытого <td> либо следующий <td>, либо закрытый </tr> и вставки перед ним </td>
Решается так:
Код

$pattern = '/<td([^>]*?)>(.*?)(?=<td[^>]*?>|<\/tr>)/is';
$replace = '<td$1>$2</td>$3';
$result = preg_replace($pattern, $replace, $page);

echo(htmlspecialchars($result));


Только lookahead (опция ?=) немного (или много?) подтормаживает в php. Толи в preg'е глюк, то ли одно из двух.

Автор: Luceus 9.6.2006, 16:50
Спасибо, работает =) 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)