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

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

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

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

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

4 ответа

Решение

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

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

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

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

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

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

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

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

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

<!-- [if gte mso 9]>

и закончился

<![endif]-->

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

$array = explode("<!-", $string, 2);
$begin = $array[0];
$end=substr(strrchr($string,'[endif]-->'),10);
echo $begin.$end;
Другие вопросы по тегам