Чем обработать mySQL базу?

trainer_ussr

Создатель
Регистрация
5 Фев 2010
Сообщения
49
Реакции
0
Один выдающийся человек так отвратно залил описания товаров в mySQL, что вытаскиваются оттуда они вместе с html-тэгами, и, при выгрузке в xls преобразовываются в таблицы, вместо того, чтобы просто сидеть в ячейках. Пол-беды, если бы тэги были одинаковыми - в DreamViewer поставил на автозамену и ок.
Вопрос таков: какую Вы знаете мощную софтинку, обрезающую html при экспорте? Что порекомендуете?
 
Софт готовый вряд ли есть. Проще всего слить SQL-дамп базы/таблицы, обработать регекспом, который вырежет html-теги, залить дамп обратно. Либо обрабатывать скриптом (php, perl etc) построчно, апдейтя пачками описания без тегов. Для большого числа записей - с дампом будет быстрее.
 
PHP:
strip_tags

Мускуль теги вырезать не умеет. И хоть там и есть регулярки, я бы ими не пользовался. А т.к. операция разовая - воспользовался бы функцией выше и написал простенький скрипт...
 
Нашёл тут функцию аналог strip tags для mysql


Остаётся в базе создать функцию, запустить скрипт
Код:
DROP FUNCTION IF EXISTS fnStripTags;
DELIMITER |
CREATE FUNCTION fnStripTags( Dirty VARCHAR(4000) )
RETURNS VARCHAR(4000)
DETERMINISTIC 
BEGIN
  DECLARE iStart, iEnd, iLength INT;
  WHILE LOCATE( '<', Dirty ) > 0 AND LOCATE( '>', Dirty, LOCATE( '<', Dirty )) > 0 DO
    BEGIN
      SET iStart = LOCATE( '<', Dirty ), iEnd = LOCATE( '>', Dirty, LOCATE('<', Dirty ));
      SET iLength = ( iEnd - iStart) + 1;
      IF iLength > 0 THEN
        BEGIN
          SET Dirty = INSERT( Dirty, iStart, iLength, '');
        END;
      END IF;
    END;
  END WHILE;
  RETURN Dirty;
END;
|
DELIMITER ;

И дальше можно пользоваться, например вытащить данные без тегов
Код:
SELECT aaa, fnStripTags(aaa) FROM aaa_table;
или обновить поля
Код:
UPDATE aaa_table SET aaa=fnStripTags(aaa);
перед использованием лучше сделать копию таблицы.
 
Это некорректная функция. Все что она делает - удаляет любой текст между последовательными вхождениями знаков < и >.

А это далеко не всегда могут быть хтмл-теги.

Хоть и для бОльшей части она отработает верно.
 
PHP:
$res=mysq_query("select * from table");
while ($out=mysql_fetch_assoc($res)){
$out['поле']=strip_tags($out['поле']);

есличо, можно добавить addslashes:
$out['поле']=addslashes(strip_tags($out['поле']));

и сохраняем:
mysql_query("update table set поле=\"".$out['поле']."\" where тут_пишем ключ по поторому определяется поле");
}
вместо звездочки в "select * from table" можно указать нужные поля, в т.ч. ключевое
profit.
 
Назад
Сверху