PHP для очистки вставил ввод Microsoft - PullRequest
9 голосов
/ 19 декабря 2008

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

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

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

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

Ответы [ 4 ]

7 голосов
/ 19 декабря 2008

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

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

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

0 голосов
/ 05 июля 2017

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

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

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

0 голосов
/ 17 мая 2016

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

<!-- [if gte mso 9]>

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

<![endif]-->

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

$array = explode("<!-", $string, 2);
$begin = $array[0];
$end=substr(strrchr($string,'[endif]-->'),10);
echo $begin.$end;
0 голосов
/ 12 февраля 2015

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

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

...