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


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

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

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

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

Author: da5id, 2008-12-19

4 answers

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

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

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

 7
Author: Eran Galperin, 2008-12-18 23:01:49

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

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

 0
Author: Isra, 2015-02-12 10:25:59

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

<!-- [if gte mso 9]>

И заканчивается

<![endif]-->

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

$array = explode("<!-", $string, 2);
$begin = $array[0];
$end=substr(strrchr($string,'[endif]-->'),10);
echo $begin.$end;
 0
Author: Szél Lajos, 2016-05-17 19:14:55

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

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

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

 0
Author: oknate, 2017-07-05 19:51:13