-Помогите написать скрипт-
alex220278
Новичок
3/9/2007, 1:34:50 PM
Я, являюсь администратором сайта Российской академии наук.
Научные сотрудники, постоянно приносят мне материал, для опубликации в формате 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>
Подскажите пожалуйста способы борьбы с этим?
зы: Может есть, уже готовые проги, не обязательно скрипты?
Научные сотрудники, постоянно приносят мне материал, для опубликации в формате 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
Профессионал
3/10/2007, 12:50:25 AM
Мне думается, можно так: preg_replace("/style=*>/", ">", $text);
Использовать эту функцию и регулярные выражения.
Использовать эту функцию и регулярные выражения.
alex220278
Новичок
3/19/2007, 2:45:42 AM
Это еще одна проблема с которой я обращаюсь на форум и сам-же опубликовываю ответ.
Вот, может кому пригодится:
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__ );
?>
Вот и весь скрипт.
Можно закрывать тему на замочек.
Вот, может кому пригодится:
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__ );
?>
Вот и весь скрипт.
Можно закрывать тему на замочек.