Заменить / ограничить нестандартные символы в CKEDITOR

У меня есть экземпляр CKEDITOR (версия 4.5.7), в который пользователи вводят контент. Этот контент публикуется в поле базы данных с сопоставлением SQL_Latin1_General_CP1_CI_AS,

Проблема возникает, когда пользователь вставляет текст из Word или аналогичного текстового редактора. Два символа, в частности, искажаются при попадании в базу данных: ” (”) а также – (–),

Я уже установил config.entities в false для предотвращения преобразования символов в их HTML-эквиваленты. Сейчас я ищу место, где я могу перехватить процесс, чтобы найти / заменить любые оскорбительные символы. Хотя JavaScript для такого рода вещей достаточно прост (text = text.replace('”', '"')), Я не уверен, где его поставить, чтобы это произошло. Я пытался разместить его в разных местах в функции CKEDITOR.htmlParser.basicWriter, но пока ничего не получалось.

Похоже, что это будет довольно распространенная проблема - возможно, есть способ установить параметры сортировки в редакторе, чтобы он соответствовал базе данных?

Спасибо за любой совет.

1 ответ

Решение

Я продолжал погружаться в функцию basicWriter, пока в конце концов не удивился, найдя место, которое действительно работает. По сути, это процесс, который я использовал для решения этой проблемы без редактирования ckeditor.js

  1. Загрузите и откройте несжатую версию файла ckeditor.js.
  2. Найдите и скопируйте весь CKEDITOR.htmlParser.basicWriter Функция в нижней части вашего файла config.js. Это в основном переопределяет функцию, переопределяет реальную, но позволяет нам вносить в нее изменения, не нарушая будущие обновления.
  3. В скопированной функции в config.js найдите раздел getHtml и настройте html переменная, прежде чем он будет возвращен. Ниже приведен шаблон, который поможет вам найти этот раздел

getHtml: function( reset ) {
var html = this._.output.join( '' );

  // this is where we can replace individual characters or make other 
  // customizations
  html = html.replace('”', '"');
  html = html.replace('–', '-');

  if ( reset )
    this.reset();

  return html;
}
Другие вопросы по тегам