Javascript HTML редактор проблемы копирования / вставки - PullRequest
4 голосов
/ 09 августа 2010

Мы запускаем несколько больших каталогов, где пользователи часто копируют / вставляют содержимое из текстовых документов и т. Д. В наш HTML-редактор TinyMCE.

Проблема с этим часто заключается в том, что следующий текст, например, скрывается там, который отображается на нашемвеб-страницы:

<!-- /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; mso-layout-grid-align:none; punctuation-wrap:simple; text-autospace:none; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} a:link, span.MsoHyperlink {color:blue; text-decoration:underline; text-underline:single;} a:visited, span.MsoHyperlinkFollowed {color:purple; text-decoration:underline; text-underline:single;} p {mso-margin-top-alt:auto; margin-right:0in; mso-margin-bottom-alt:auto; margin-left:0in; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} @page Section1 {size:8.5in 11.0in; margin:1.0in 1.25in 1.0in 1.25in; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:0;} div.Section1 {page:Section1;} -->

Есть ли плагин TinyMCE или какой-либо другой кросс-браузерный html-редактор, который автоматически удаляет это?эти комментарии декларации.

Ответы [ 2 ]

3 голосов
/ 09 августа 2010

Я пытался оптимизировать этот в течение многих лет.

Мое лучшее решение до сих пор выглядит так:

  • не используйте корневой блок, макет будет реализовывать корневой макет
  • не ожидайте, что пользователь поймет разницу между <p> и <br />, и поэтому все воспринимает как простой разрыв, так как он менее запутан и более похож на мс-слово
  • разрешить только ожидаемые элементы

Это будет код инициализации .

remove_linebreaks : false,
force_br_newlines : true, <?php /* maybe we can behave more like gmail */ ?>
force_p_newlines : false,   <?php /* and preserve all message line breaks */ ?> 
convert_newlines_to_brs : false, <?php /* even so i would not count with it */ ?>
forced_root_block : false

<?php /* explicitly define what will be allowed */ ?>
valid_elements: "h1,h2,h3,br,b,a,i,u,strong/b,em/i,u/span,strike/span,span,span[style],"+
                "sub,sup,a[href|name|anchor|target|title],ul,ol,li,p,object[classid|width|height|codebase|*],"+
                "param[name|value|_value],embed[type|width|height|src|*],"+
                "img[style|longdesc|usemap|src|border|alt=|title|hspace|vspace|width|height|align]",

И затем у меня есть следующая функция постобработки, чтобы удалить все <p> и преобразовать все </p> в <br /><br />, это было самое стабильное решение для копирования и вставки, которое я когда-либо мог до dev.

Это функция постобработки :

setup : function(ed) {
    ed.onPostProcess.add(function(ed, o) {
        // Remove all paragraphs and replace with BR
        o.content = o.content.replace(/<p [^>]+>|<p>/g, '');
        o.content = o.content.replace(/<\/p>/g, '<br />');
    });
},

Обратите внимание, что это всего лишь фильтрация Javascript, и пользователь сможет мгновенно передать весь этот нежелательный код на сервер. Хотя эта настройка, вероятно, предназначена для настроек конечного администратора, также используйте strip_tags на стороне сервера, поскольку кто-то где-то, вероятно, сможет обойти это.

Надеюсь, это поможет!

1 голос
/ 09 августа 2010

Команда PHP regex - это то, что я бы использовал лично.

$str = preg_replace('/<!--.*?--\>/','',$str);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...