preg_match_all очистка от разных тегов

Рейтинг: 0Ответов: 1Опубликовано: 07.07.2011

В описании товаров магазина есть куча хтмл мусора. Есть описания такого вида

<ul>
   <li><span class="Apple-style-span" style="font-family: Arial, serif; font-size: 12px; ">Кухонные весы</span></li>

   <li><span class="Apple-style-span" style="font-family: Arial, serif; font-size: 12px; ">Максимальный вес<span class="Apple-tab-span" style="white-space: pre; ">    </span>5 кг</span></li>

   <li><span class="Apple-style-span" style="font-family: Arial, serif; font-size: 12px; ">Цена деления<span class="Apple-tab-span" style="white-space: pre; ">    </span>50 г</span></li>

   <li><span class="Apple-style-span" style="font-family: Arial, serif; font-size: 12px; ">Вес брутто<span class="Apple-tab-span" style="white-space: pre; ">    </span>0,6 кг</span></li>

   <li><span class="Apple-style-span" style="font-family: Arial, serif; font-size: 12px; ">Вес нетто<span class="Apple-tab-span" style="white-space: pre; ">    </span>0,34 кг</span></li>

   <li><span class="Apple-style-span" style="font-family: Arial, serif; font-size: 12px; ">Габариты короба (Д/Ш/Г) 74х18,8х18,8 см</span></li>

   <li><span class="Apple-style-span" style="font-family: Arial, serif; font-size: 12px; ">Характеристики кухонных весов</span></li>

   <li><span class="Apple-style-span" style="font-family: Arial, serif; font-size: 12px; ">Легко моющаяся съёмная чаша</span></li>

   <li><span class="Apple-style-span" style="font-family: Arial, serif; font-size: 12px; ">Ручная регулировка и установка нуля</span></li>
   </ul>

и такого вида

<div> 
<ul>
   <li>3 в 1: Блендер, Миксер, Измельчитель</li>

   <li>Погружной блендер из нержавеющей стали</li>

   <li>Венчики для взбивания яиц и крема</li>

   <li>Чаша измельчителя</li>

   <li>2 скоростных режима</li>

   <li>Настенный держатель</li>

   <li>Мерный стаканчик</li>

   <li>Мощность: 700 Вт</li>
  </ul>
</div>

И это не все счастье которое мне достается.

Мне нужно очистить это описание от хтмл, сохранив строки, тоесть чтобы потом показать пользователю так:

  • Кухонные весы Максимальный вес 5
  • Цена деления 50 г
  • Пункт списка
  • Вес брутто 0,6 кг
  • Пункт списка
  • Пункт списка

Я делаю вот так: preg_match_all("|<[^>]+>(.*)</[^>]+>|U",$mytext,$out, PREG_PATTERN_ORDER);

Но спаны и т.д не очищаются. Помогите пожалуйста написать правильную регулярку.

Ответы

▲ 1Принят
<?
$content = $arResult['DETAIL_TEXT'];
$content = explode('###', strip_tags(str_replace('<li>', '###', $content)));
// 1) заменяем все <li>(или любой другой 100% существующий тег)
// на ###(или любую отсутствующую последовательность символов);
// 2) делаем strip_tags (остается "test1###test2###test3");
// 3) разбиваем строку по разделителю ###

// окей, разбиваем по столбцам =)
foreach ($content as $n => $str)
  if (!trim($str))
    unset($content[$n]);
$out = array(array(), array());
$count2 = floor(count($content)/2);
$n = 0;
foreach ($content as $str) {
  $out[intval($n>$count2)][] = trim($str);
  $n++;
  }

// var_dump($out); // 0 - первый стоблец, 1 - второй.
echo '<ul>';
echo '<li><h4>Первый столбец</h4></li>';
foreach($out[0] as $str)
  echo '<li>'.$str.'</li>';
echo '</ul>';
echo '<ul>';
echo '<li><h4>Второй столбец</h4></li>';
foreach($out[1] as $str)
  echo '<li>'.$str.'</li>';
echo '</ul>';
?>