удерживать пользовательский контент от нарушения макета? - PullRequest
6 голосов
/ 02 мая 2011

У меня есть сайт, который оборачивает некоторый пользовательский контент, и я хочу иметь возможность отделить разметку для макета и разметку от пользовательского контента, чтобы содержимое ug не могло нарушить макет сайта.

Пользовательский контент является доверенным, так как он поступает от известной группы пользователей в моей сети, но, тем не менее, допускается только небольшое подмножество HTML-тегов (p, ul / ol / li, emСильный, и еще пара).Тем не менее, пользовательский контент не гарантированно будет правильно сформирован, и у нас были некоторые случаи искаженного пользовательского контента, нарушающего макет сайта.

Мы работаем с нашими пользователями, чтобы сохранитьконтент хорошо сформирован, но пока я пытаюсь найти хороший способ отделить контент от макета.Я изучал пространства имен, но не смог найти хорошую документацию о поддержке CSS для встроенных пространств имен.

У кого-нибудь есть хорошие идеи?

РЕДАКТИРОВАТЬ

Я видел некоторые действительно хорошие предложения здесь, но я должен пояснить, что у меня абсолютно нет контроля над механизмом ввода, который используют пользователи.Они вводят контент в одну систему, и моя страница использует API этой системы для извлечения контента из нее.Эта система использует TinyMCE, но, как я уже сказал, мы все еще получаем некоторое искаженное содержимое.

Ответы [ 4 ]

4 голосов
/ 02 мая 2011

Почему бы не использовать уценку

Если ваши пользователи хорошо знают HTML или могут понять концепцию синтаксиса уценки, я советую вам пойти на это.Stackoverflow прекрасно работает с ним.Я не могу себе представить наличие обычного многофункционального редактора в Stackoverflow.Редакторы Markdown намного проще и быстрее в использовании и предоставляют достаточные возможности форматирования для большинства ситуаций.Если вам нужны какие-то специальные дополнительные функции, вы всегда можете добавить их в систему, но для начала вам хватит возможностей коробки.

Просмотр в режиме реального времени для самостоятельной проверки

Но не забудьте включитьпросмотр в реальном времени того, что пишут пользователи.Самостоятельная проверка делает чудеса, поэтому они исправляют свои ошибки перед публикацией данных.

3 голосов
/ 29 января 2013

Вместо того, чтобы анализировать результат или заставлять пользователя использовать структурированный формат, просто отобразите содержимое в iframe:

<iframe id="user_html"></iframe>

<script>
document.getElementById("user_html").src = "data:text/html;charset=utf-8," + escape(content);
</script>
1 голос
/ 02 мая 2011

Я создавал собственные системы CMS исключительно в течение нескольких лет, и мне всегда везло с сочетанием качественного WYSIWYG, строгой проверки на стороне пользователя и непрерывной проверки на стороне сервера.

Я всегда склоняюсь к CKEditor, потому чтоэто единственный интерфейсный редактор, который может работать с выходом Microsoft Word на внешнем интерфейсе ... это обязательно нужно иметь в моих книгах.Несомненно, у других есть вставка из текстового решения, но удачи, заставляющие пользователей использовать это.У меня фактически была клиентская перегрузка вставки базы данных благодаря Microsoft Word, который не был очищен в Tiny.HTML Tidy - это отличное решение для очистки вещей перед проверкой в ​​бэкэнде.

CK имеет встроенные шаблоны и классы, поэтому я использовал их, чтобы помочь моим пользователям форматировать, не выходя за рамки.На серверной части я проверил, чтобы они не пробовали никаких забавных дел с CSS, но эта группа пользователей никогда не интересовалась.Дайте им достаточно (безопасных) функций, и они никогда не ДОЛЖНЫ быть изгоями.

0 голосов
/ 02 мая 2011
  • Возможно, излишнее, но HTML Tidy может помочь, если вы можете его использовать.

  • Используйте WYSIWYG, как TinyMCE или CKEditor , который имеет встроенные методы очистки.

Предложение Роберта Коритника использовать уценку кажется блестящим, особенно если учесть, что вы разрешаете тольконесколько безобидных тегов форматирования.

Я не думаю, что вы можете что-то сделать с CSS, чтобы мешать макетам ломаться из-за открытых тегов HTML, поэтому я, вероятно, забуду эту идею.

...