CKEditor. Исправляем ошибки удаления тегов, php и javascript

Как известно в различных системах управления сайтов используют wysiwyg редакторы и одним из самых популярных является редактор CKEditor. Написано он на Javascript и используется, например, в CMS Drupal или Opencart версий до второй. Полностью скачать его можно с официального сайта CKEditor, как не удивительно с названием http://ckeditor.com/ ).

 

ckeditorИтак расскажу какие проблемы могут возникнуть при работе с ним. Первое и что самое раздражающее CKeditor последних версий режет теги, которые мы используем при редактировании записи. За такое непотребное поведение отвечает AdvancedContentFilter (AСF). Зачастую AdvancedContentFilter (AСF), нововведение появившееся в CKEditor начиная с версии 4.1, вызывает именно такую реакцию. Создатели CKEditor им очень гордятся и настаивают на его необходимости. По умолчанию он настроен таким образом, чтобы в результирующий HTML не попадало ничего кроме того, что ЯВНО РАЗРЕШЕНО.

Чтобы отключить его полностью, нужно в конфигурационном файле /ckeditor/config.js добавить строчку:

config.allowedContent = true;

либо можно явно задать в нем допустимые тэги и атрибуты.

config.allowedContent =
'h1 h2 h3 p blockquote strong em;' +
'a[!href];' +
'img(left,right)[!src,alt,width,height];';

Другой вариант проблем с CKEditor — удаление javascript кода. Для решения данной проблемы также в конфигурационном файле добавляем строку

CKEDITOR.config.protectedSource.push(/<(script)[^>]*>.*</script>/ig);

Для отключения контроля за кодом php также добавляем строку

CKEDITOR.config.protectedSource.push(/<?[sS]*??>/g);// разрешить php-код

И в конечном итоге имеем кусок кода для отключения всевозможного контроля данного фильтра

CKEDITOR.config.indentClasses = ["ul-grey", "ul-red", "text-red", "ul-content-red", "circle", "style-none", "decimal", "paragraph-portfolio-top", "ul-portfolio-top", "url-portfolio-top", "text-grey"];
CKEDITOR.config.protectedSource.push(/<(style)[^>]*>.*</style>/ig);
CKEDITOR.config.protectedSource.push(/<(script)[^>]*>.*</script>/ig);// разрешить теги <script>
CKEDITOR.config.protectedSource.push(/<?[sS]*??>/g);// разрешить php-код
CKEDITOR.config.protectedSource.push(/<!--dev-->[sS]*<!--/dev-->/g);
CKEDITOR.config.allowedContent = true; /* all tags */

Но при работе с данным редактором у меня возникла проблема несколько иного вида.. В opencart версии выше 2 по умолчанию используется редактор summernote, который грешит всеми данными параноидальными функциями, в особенности правка кода пользователя. Чтобы долго не ковыряться в данном редакторе можно поставить модуль CKeditor is back!, который полностью заменяет встроенный редактор на CKeditor…Какое то время назад поставил данный редактор на сайт на выделенном сервере, где все настраивал сам, потом была необходимость перенести на хостинг и началось самое интересное…При добавлении ссылки CKeditor преобразовывал ее к виду / то есть к имени сайта, либо же оставлял в варианте «имя-сайта»»имя-сайта/cссылка». Естественно при таком раскладе ничего не находилось. Попытка внедрить все данные изменения в конфигурационный файл ни к чему не привела. После того как переставил версию CKEditor на версию раньше 4 и поняв что результат идентичный стало понятно, что пресловутый AdvancedContentFilter тут не причем и ошибка явно в настройках окружения php. После анализа настроек php единственный параметр, который мог за это отвечать был magic quotes. Так как дело было на хостинге, где прав администратора сервера у меня не было данную директиву отключаем через редактирование .htaccess

php_flag magic_quotes_gpc Off

Если у Вас есть вопросы или дополнения к данной статье с удовольствием отвечу)

З.Ы. По сообщению в комментарии от Slava необходимо вставить теги,

сам не проверял, но возможно кому пригодиться)

Пролистать наверх