PHP для очистки вставленного ввода Microsoft

У меня есть сайт, на котором пользователи могут размещать сообщения (например, на форумах, в комментариях и т. д.), используя настраиваемую реализацию TinyMCE. Многим из них нравится копировать и вставлять из Word, а это означает, что их ввод часто сопровождается множеством связанных встроенных форматов MS.

Я не могу просто избавиться от <span whatever>, так как TinyMCE полагается на тег span для некоторых элементов форматирования, и я не могу (и не хочу) заставить указанных пользователей использовать функцию TinyMCE «Вставить из Word» (которая не все равно не так хорошо работает).

Кто-нибудь знает библиотеку/класс/функцию, которая позаботится об этом для меня? Это должно быть общая проблема, хотя я не могу найти ничего определенного. Недавно я подумал, что серия регулярных выражений грубой силы, ищущих шаблоны, специфичные для MS, может помочь, но я не хочу переписывать что-то, что уже может быть доступно, если мне не нужно.

Также было бы неплохо исправить фигурные кавычки, тире и т.д. У меня есть свои собственные вещи, чтобы сделать это сейчас, но я действительно хотел бы найти один фильтр MS-преобразования, чтобы управлять ими всеми.


person da5id    schedule 18.12.2008    source источник


Ответы (4)


HTML Purifier создаст разметку, соответствующую стандартам, и отфильтрует многие возможные атаки (например, XSS).

Для более быстрой очистки, не требующей фильтрации XSS, я использую расширение PECL Tidy, которое является привязкой для Утилита Tidy HTML.

Если это вам не поможет, я предлагаю вам переключиться на FCKEditor, в котором есть эта функция встроенный.

person Eran Galperin    schedule 18.12.2008
comment
Спасибо, но ни один из них, похоже, не справляется с форматированием MS, что меня в первую очередь интересует. Очиститель HTML запланировал его для версии 3.5, но с необходимыми исследованиями. - person da5id; 19.12.2008
comment
Тогда я предлагаю вам переключиться на fckeditor, который может работать с вводом слов. Обновил мой ответ. - person Eran Galperin; 19.12.2008
comment
Хм. Раньше я предпочитал TinyMCE FCKeditor по ряду других причин, но это может повлиять на меня. Спасибо за совет и рад принять мой +1 :) - person da5id; 19.12.2008
comment
Имейте в виду, (если я перейду), мне все еще нужно убрать все дерьмо, которое уже было опубликовано... - person da5id; 19.12.2008
comment
Попробуйте предложения, не относящиеся к PHP, по следующей ссылке — forums.devarticles.com/general-programming-help-4/ - person Eran Galperin; 19.12.2008
comment
Также обратите внимание, что FCKEditor больше не поддерживается и будет иметь проблемы с современными браузерами, поэтому вместо этого вам следует использовать CKEditor. ckeditor.com - person Kaivosukeltaja; 20.03.2012
comment
Просто примечание: Tidy действительно справляется с форматированием MS, и уже много лет. Я использовал 4-5 лет назад, чтобы удалить вставленный контент MS Word... tidy .sourceforge.net/docs/quickref.html#word-2000 - person Jon L.; 13.04.2012

В моем случае это сработало просто отлично:

$text = strip_tags($text, '<p><a><em><span>');

Вместо того, чтобы пытаться вытащить то, что вам не нужно, например встроенное слово xml, вы можете просто указать разрешенные теги.

person oknate    schedule 05.07.2017

Веб-сайт http://word2cleanhtml.com/ хорошо справляется с преобразованием из Word. Я использую его в PHP путем удаления, для обработки некоторого устаревшего HTML, и до сих пор он работает довольно хорошо (результат — очень чистый код <p>, <b>). Конечно, будучи внешним сервисом, использовать его в онлайн-обработке, как в вашем случае, нехорошо.

Если вы попробуете это и выдаст много ошибок 400, попробуйте отфильтровать HTML с помощью Приберитесь в первую очередь.

person Isra    schedule 12.02.2015

В моем случае была закономерность. Нежелательная часть всегда начиналась с

<!-- [if gte mso 9]>

и закончился

<![endif]-->

Поэтому моим решением было вырезать все до и после этого блока:

$array = explode("<!-", $string, 2);
$begin = $array[0];
$end=substr(strrchr($string,'[endif]-->'),10);
echo $begin.$end;
person Szél Lajos    schedule 17.05.2016