Обработка HTML-кода, образованного визуальными редакторами

yppu

Guest
Обработка HTML-кода, образованного визуальными редакторами

На своих сайтах я использую он-лайновый визуальный редактор, благодаря которому в тексте появляется много мусора:

например, часто вместо "ремонт огтехники", получается "ремонт огтехники"(ненужный нбсп)
или "ремонт  огтехники" (нбсп + пробел).

В тоже время в указании цены "24 500 руб.",
мне хотелось бы получать "24 500 руб."
(чтобы половина числа не переносилась на след. строчку).

Подскажите, как можно на PHP осуществить такое преобразование?
 

BRat

o_0
PHP:
$alltext=preg_replace('/(?xism)(?<![0-9])&nbsp;(?![0-9])/',' ',$alltext);
Попробуй это, должно заменять все неразрывные пробелы перед и после которых нет цифр на пробел.
 

yppu

Guest
Огромное спасибо, всё работает :)
С числами тогда я уж сам разберусь
 

nip

Guest
Кстати каким реактором пользуешься? Как раз ищу подходящий.
 

yppu

Guest
Я пользуюсь вот этим редактором
http://www.jumbo.com.ru/download/arc/HTMLRTA12.exe
- полный отстой :)
пришлось много модифицировать под движок.

Есть редакторы гораздо лучше, но руки не дойдут подобрать что-нибудь более подходящее.
 

GeT

Новичок
yppu
Я пользуюсь RichText Editor.
Мне очень нравится, потому что там нету всяких наворотов типа аплоада картинок (это я сам делал).
Ставится за 5 минут :D
Поищи на SourceForge!
 

Кром

Новичок
>например, часто вместо "ремонт огтехники", получается "ремонт&nbsp;огтехники"(ненужный нбсп)
или "ремонт&nbsp; огтехники" (нбсп + пробел).

Это самое меньшее из зол, которое может случиться при использовании таких редакторов.

Гораздо интереснее, когда администраторы вставляют в поле редактирования контент из других сайтов вместе с форматированием, таблицами, картинками и прочим.
 

yppu

Guest
Автор оригинала: f1
а уж из ворда когда вставляют ....
А для этого я сделал волшебную галочку "удалить все лишние тэги". Убиваю всё, кроме абзацев, заголовков, списков и таблиц, в которых соответсвенно убиваю все атрибуты :)
 

yppu

Guest
Ну у меня эта функция большая и неповоротливая -)

Поэтому расскажу вкратце

смысл такой:

1. заменяем все нужные открывающие тэги на что-то в стиле BBCODE
$str = preg_replace('/<TABLE.*?">/', '\[TABLE\]>', $str);
$str = preg_replace('/<TR.*?">/', '\[TR\]', $str);
$str = preg_replace('/<TD.*?">/', '\[TD\]', $str);

2. Потом примерно тоже самое делаем с закрывающими тэгами

3. убиваем всю html-разметку со всеми оставшимися тэгами
$str=strip_tags($str);

4. Заменяем нужные нам тэги вида [tag] обратно на <tag>

И в итоге получаем абсолютно чистенький HTML-код без свяких ссылок, картинок, стилей, классов, ширины ячеек таблиц и всякого говна. Просто и эффективно.

p.s. До этого пробовал использовать какой-то навороченный класс для очистки, но он только частично очищал, так и не разобрался как оно работало.
 
Сверху