Лучший способ отформатировать случайно скопированные тексты с других сайтов?

Проблема:

Мой сайт позволяет пользователям копировать/вставлять содержимое других файлов/документов, таких как MS Word и веб-сайтов (например, CNN.com), в предоставляемый нами Rich TextEditor. Этот Rick TextEditor поддерживает (и мы тоже должны поддерживать) вставку содержимого со встроенными стилями, это приносит случайные стили, встроенные стили тегов из источника содержимого.

Например: если вы вставляете из любого документа MS Word, он приносит H1, H2, P, UL/OL/LI, STRONG, I, EM, TABLE и т. Д. С их собственными стилями. То же самое происходит, когда вы копируете вставку с других веб-страниц.

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

Другая проблема заключается в том, что при копировании/вставке из внешнего источника некоторые теги не закрываются должным образом, что приводит к нарушению моего макета. Как мы справляемся с этим?

Для стилей, м применяется

.article * {
   allKnownCSSProperties: myValues!important;
}

Подойдет любой метод. JavaScript, C# предпочтительнее.


person Shekhar K. Sharma    schedule 15.10.2013    source источник


Ответы (2)


Чтобы удалить нежелательные стили, достаточно простого регулярного выражения. В Javascript:

/( style=['"][^'"]*['"])/g
person Pappa    schedule 15.10.2013
comment
Это удалит атрибут стиля или очистит его? - person Shekhar K. Sharma; 15.10.2013
comment
Он будет соответствовать атрибуту стиля. Затем вы можете удалить его. Одно и то же регулярное выражение будет в целом похоже на Javascript или C#. - person Pappa; 15.10.2013
comment
Это вообще помогло? - person Pappa; 18.10.2013
comment
что ты уже испробовал? Регулярное выражение, которое я разместил, является JS, в С# это будет что-то вроде: @(style=['][^']*[']) - person Pappa; 18.10.2013

Я бы попытался решить проблему с отсутствием закрытых тегов следующим образом: проанализируйте все сообщение и соберите теги, которые не заканчиваются на />, и удалите их, если вы обнаружите, что такой же тег начинается с </. Исключите теги, у которых может не быть закрывающего тега, создайте закрывающие теги для всех тегов, которые все еще находятся в коллекции, и поместите их в конец вашего макета Rich TextEditor. В некоторых случаях это может не работать или выглядеть коряво, но первое, что приходит в голову, может помочь решить проблему

person Deadcow    schedule 15.10.2013