Я пытался оптимизировать этот в течение многих лет.
Мое лучшее решение до сих пор выглядит так:
- не используйте корневой блок, макет будет реализовывать корневой макет
- не ожидайте, что пользователь поймет разницу между
<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
на стороне сервера, поскольку кто-то где-то, вероятно, сможет обойти это.
Надеюсь, это поможет!