Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Опять парсинг MS-индусоида. Вложенные span - как найти закрывающий?
Форумы портала PHP.SU » PHP » Регулярные выражения » Опять парсинг MS-индусоида. Вложенные span - как найти закрывающий?

Страниц (1): [1]
 

1. LShark - 23 Февраля, 2013 - 09:44:40 - перейти к сообщению
Опять возникла проблема при парсинге и очистке MHT-файла, созданного MsWord.

Из него без проблем получаю html-файл-основу, но вот проблема - он переполнен всякими (не пытайтесь разбирать, это лишь пример):
Спойлер (Отобразить)


После злобной очистки текст очищается напрочь и из 400кб такого вот творения индусов из Мелкомягких получается практически не измененный 75кб документ.

Все бы гуд, но прроблема в том, что ЦВЕТ шрифта также засунут в <span> и при зачистке удаляется вместе с прочей ненужной разметкой мелкомягких.

Отсюда ВНИМАНИЕ!!! ( Улыбка ) вопрос:
Есть такой вариант (выстроено для облегчения понимания):
CODE (htmlphp):
скопировать код в буфер обмена
  1. <span (куча всякого текста) color:red'>
  2.   <span (куча всякого текста)>То, что надо оставить</span>
  3.   <span (куча всякого текста)>То, что надо оставить</span>
  4.   <span (куча всякого текста)>То, что надо оставить</span>
  5.   <span (куча всякого текста)>То, что надо оставить</span>
  6. </span> (который в начале color:red)...
  7.  

Как заменить такое на:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <font color=red>
  2.   <span (куча всякого текста)>То, что надо оставить</span>
  3.   <span (куча всякого текста)>То, что надо оставить</span>
  4.   <span (куча всякого текста)>То, что надо оставить</span>
  5.   <span (куча всякого текста)>То, что надо оставить</span>
  6. </font>
  7.  

Так как дальше все <span> и </span> просто удаляются, уменьшая размер файла, но не меняя результат вывода этого индусокода...

PS. Не имеет значения, что будет: <div style:...> </div> или <font color=...></font> на выходе.
2. etoYA - 23 Февраля, 2013 - 14:14:41 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. preg_replace('#<span .*? color:(.*?)>\s(.*?)\r\n</span>#s', "<font color=$1>$2\r\n</font>", $content)
3. LShark - 23 Февраля, 2013 - 14:46:35 - перейти к сообщению
Это сожрет до последнего спана, к сожалению, индусы столько спанов забодяжили, что там текст идет сплошняком.
Нужно именно найти, какой из /спанов закрывает тот, что с color:

В этом то и проблема...
4. etoYA - 23 Февраля, 2013 - 15:00:42 - перейти к сообщению
LShark, тут как бы так и есть)
5. LShark - 23 Февраля, 2013 - 18:33:54 - перейти к сообщению
Увы, нет. Не так.

Посмотри то, что под спойлером. Как раз в самом низу там такой вариант - с колором.

Не забывай, что этот спан, закрывающий спан с колором - далеко не последний, их там еще туева хуча. Индусы, чо...
(Добавление)
Я, конечно, могу поступить иначе - не удалять полностью теги span, а просто вычистить их, превратив в <span> </span>, и только с цветом оставить, модифицировав их в <span style='font-color: red'>

Но это резко увеличит размеры полученного файла.

 

Powered by ExBB FM 1.0 RC1