Заменить / ограничить нестандартные символы в 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
- Загрузите и откройте несжатую версию файла ckeditor.js.
- Найдите и скопируйте весь
CKEDITOR.htmlParser.basicWriter
Функция в нижней части вашего файла config.js. Это в основном переопределяет функцию, переопределяет реальную, но позволяет нам вносить в нее изменения, не нарушая будущие обновления. - В скопированной функции в 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;
}