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

  • Автор темы Автор темы yppu
  • Дата начала Дата начала

yppu

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

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

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

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

Подскажите, как можно на PHP осуществить такое преобразование?
 
PHP:
$alltext=preg_replace('/(?xism)(?<![0-9])&nbsp;(?![0-9])/',' ',$alltext);
Попробуй это, должно заменять все неразрывные пробелы перед и после которых нет цифр на пробел.
 
Огромное спасибо, всё работает :)
С числами тогда я уж сам разберусь
 
Кстати каким реактором пользуешься? Как раз ищу подходящий.
 
Я пользуюсь вот этим редактором
http://www.jumbo.com.ru/download/arc/HTMLRTA12.exe
- полный отстой :-)
пришлось много модифицировать под движок.

Есть редакторы гораздо лучше, но руки не дойдут подобрать что-нибудь более подходящее.
 
yppu
Я пользуюсь RichText Editor.
Мне очень нравится, потому что там нету всяких наворотов типа аплоада картинок (это я сам делал).
Ставится за 5 минут :D
Поищи на SourceForge!
 
>например, часто вместо "ремонт огтехники", получается "ремонт&nbsp;огтехники"(ненужный нбсп)
или "ремонт&nbsp; огтехники" (нбсп + пробел).

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

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

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

смысл такой:

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. До этого пробовал использовать какой-то навороченный класс для очистки, но он только частично очищал, так и не разобрался как оно работало.
 
Сверху