Очистка Word to HTML конвертирования

Статус
В этой теме нельзя размещать новые ответы.

drawing4

Профессор
Регистрация
21 Ноя 2008
Сообщения
323
Реакции
37
Хочу в php скрипте удалить лишние теги, но регулярка не работает когда есть перенос на другую строку.

Есть код с мусором вида
PHP:
<p style="text-align: left;"><!--[if gte mso 9]><xml> <o:OfficeDocumentSettings> 
	<o:AllowPNG /></o:OfficeDocumentSettings></xml><![endif]--><!--[if gte mso 9]><xml>
 <w:WordDocument>
  <w:View>Normal</w:View>
  <w:Zoom>0</w:Zoom></xml><![endif]-->
Тут много буков</p>
Нужна регулярка которая удаляет теги <xml>...<xml> вместе с содержимым.
Подобрал такую:
PHP:
"/<xml>(.*)<\/xml>/e"
Она работает когда текст в одну строку между <xml>...<xml>. Знаю что нужен модификатор s но почему-то не работает.


К сожалению перепробовал кучу програм, удаляет и то что надо оставить.


P.S. Подобрал такую

PHP:
<xml>(.*)\s(.*)</xml>
на сайте работает а у меня нет почему-то. Где косяк? Сайт
 
Она работает когда текст в одну строку между <xml>...<xml>. Знаю что нужен модификатор s но почему-то не работает.
К сожалению перепробовал кучу програм, удаляет и то что надо оставить.
Странно у меня так работает
PHP:
'/<xml>.*?<\/xml>/is'
а почему не так?
PHP:
'/<!--\[if gte mso 9\]>.*?<!\[endif\]-->/is'
 
Странно у меня так работает
PHP:
'/<xml>.*?<\/xml>/is'
а почему не так?
PHP:
'/<!--\[if gte mso 9\]>.*?<!\[endif\]-->/is'

Можно и так. Можно у вас попросить тестовый скрипт в котором регулярка у вас работает? У меня не хочет

Делаю вот так (на PHP:(
PHP:
$pattern='/<xml>.*?<\/xml>/is';
//$pattern='/<!--\[if gte mso 9\]>.*?<!\[endif\]-->/is';
$html = preg_replace($pattern, '', $input);
 
Зачем изобретать колесо
на Dreamweaver можно спокойно чистить.
из вашего кода получается
PHP:
<p style="text-align: left;">Тут много буков</p>
 
Зачем изобретать колесо
на Dreamweaver можно спокойно чистить.
из вашего кода получается
PHP:
<p style="text-align: left;">Тут много буков</p>

Мне в php скрипте надо почистить строку перед отправкой в базу
 
PHP:
<?php
$html = '<p style="text-align: left;"><!--[if gte mso 9]><xml> <o:OfficeDocumentSettings> 
    <o:AllowPNG /></o:OfficeDocumentSettings></xml><![endif]--><!--[if gte mso 9]><xml>
 <w:WordDocument>
  <w:View>Normal</w:View>
  <w:Zoom>0</w:Zoom></xml><![endif]-->
Тут много буков</p>';

$html = preg_replace('/<!--\[if gte mso 9\]>.*?<!\[endif\]-->/is','',$html);
echo $html;
обычно проверяю работу своей Посмотреть вложение regex.rar тестилкой :)
 
Все частично заработало. Проблема была в том что данные брались из файла а файл читался построчно, и только эти строки обрабатывались регуляркой. Когда объединил в одну строку все данные, почти все заработало.

Есть такая часть кода

PHP:
<![endif]-->

а есть такая

PHP:
<!--[endif]-->

Как задать необязательное вхождение "--" в строку? Если я правильно понял то нужно заключать условия в круглые скобки
Подскажите как соединить в одно:
PHP:
'/<!--\[if gte mso 9\]>.*?<!\[endif\]-->/is'
'/<!--\[if gte mso 10\]>.*?<!\--\[endif\]-->/is'

начало так

/<!--\[if gte mso 9|10\]>.*?<!\              [endif\]-->/is

 а конец не пойму
 
можно вообще так
PHP:
'/<!--\[if gte mso \d{1,2}+.*\[endif\]-->/si'
 
можно вообще так
PHP:
'/<!--\[if gte mso \d{1,2}+.*\[endif\]-->/si'

Спасибо, заработало. А можно вас попросить объяснить вот эту часть

PHP:
'\d{1,2}+'

Любая цифра максимум 2 вхождения т.е. двухзначное, а + ?
 
\d цифра
{1,2} одно или двухзначная
+ это обязательное присутствие хотя бы одного символа
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху