alex220278 Свободен |
09-03-2007 - 11:34 Я, являюсь администратором сайта Российской академии наук. Научные сотрудники, постоянно приносят мне материал, для опубликации в формате MS Word. Все их статьи содержат огромное кол-во таблиц и форматный текст.
Моя задача переконвертировать все это в HTML. Но после конвертирования, документ содержит огромное кол-во ненужных тегов.
Для этого, я использую простенький PHP скрипт.
пример:
CODE | <?php # В $text вставляю кашу, в которой сохраняет Word
$text=' <table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0 style='border-collapse:collapse;border:none;mso-border-alt:solid windowtext .5pt; mso-yfti-tbllook:480;mso-padding-alt:0cm 5.4pt 0cm 5.4pt;mso-border-insideh: .5pt solid windowtext;mso-border-insidev:.5pt solid windowtext'> <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'> <td width=319 valign=top style='width:239.25pt;border:solid windowtext 1.0pt; mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'> <p class=MsoNormal><span style='color:#993300'>Всякая <span class=SpellE>хрень</span> 1<o:p></o:p></span></p> </td> <td width=319 valign=top style='width:239.3pt;border:solid windowtext 1.0pt; border-left:none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt: solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'> <p class=MsoNormal>Всякая <span class=SpellE>хрень</span> 3</p> </td> </tr> </table> ';
# теперь фильтруем с помошью функции strip_tags echo strip_tags($text, '<table><td><tr><br><b>');# задаю теги, которые нужно оставить ?> |
Так вот, после обработки этой каши, таблици все равно, остаются привязанны к стилю. В этоге, конечно текст сокращается, но все равно не так, как хотелось бы. Приходится все вычищать вручную. Мне надо, чтобы например вместо:<tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'> оставалось просто <tr> Подскажите пожалуйста способы борьбы с этим?
зы: Может есть, уже готовые проги, не обязательно скрипты?
|
barrakuda Свободен |
09-03-2007 - 22:50 Мне думается, можно так: preg_replace("/style=[^<]*>/", ">", $text); Использовать эту функцию и регулярные выражения. |
alex220278 Свободен |
19-03-2007 - 00:45 Это еще одна проблема с которой я обращаюсь на форум и сам-же опубликовываю ответ.
Вот, может кому пригодится:
CODE | <?php
$badTags = Array( 'class', 'style' );
$text = isSet( $_POST[ 'text' ] ) ? $_POST[ 'text' ] : ''; if ( ini_get( 'magic_quotes_gpc' ) ) $text = stripSlashes( $text );
$text = preg_replace_callback( '/<.*?>/s', 'clb1', $text );
function clb1( $a ) { return preg_replace( '/\s+/', ' ', preg_replace_callback( '/(\S*)=(("[^"]*")|(\'[^\']*\')|([^\s>]*))/s', 'clb2', $a[ 0 ] ) ); } // clb().
function clb2( $a ) { return in_array( strToLower( $a[ 1 ] ), $GLOBALS[ 'badTags' ] ) ? '' : $a[ 0 ]; } // clb2().
?> <form method="post"> <textarea name="text" rows="15" cols="75"><?php print htmlSpecialChars( $text ); ?></textarea><br /> <input type="submit" value="Clear" /> </form> <?php print '<hr>'; highlight_file( __FILE__ ); ?> |
Вот и весь скрипт. Можно закрывать тему на замочек. |