Проблема с кодировкой после редактирования сообщения.

Автор bulatus, 02 Январь 2020, 04:18:25

« назад - далее »

0 Пользователей и 1 гость просматривают эту тему.

bulatus

Всем привет!!!

У созданного сообщения имеется два варианта редактирования/изменения.

Если использовать для редактирования кнопку "Изменить" то открывается WYSIWYG редактор с иконками и смайлами, тот что по умолчанию. После внесения изменений и сохранении, всё отображается так как надо.

Проблема возникает если редактировать через кнопку "Редактировать сообщение" (выделено красным). Открывается иная форма для редактирования, и после сохранения полностью сбивается кодировка самого сообщения и его заголовка.

Я не смог найти причину, подозреваю что проблема со скриптом .js

Как решить эту проблему или удалить эту кнопку?

handself


bulatus


S.T.A.L.K.E.R.


Сан

Цитата: bulatus от 02 Январь 2020, 10:20:32Проблема на 2.0.17
Попробуйте почисть кеш и посмотреть другими браузерами

bulatus

у меня тоже UTF-8... кнопку закомментировал. :)

Кеш и прочий ремонт в первую очередь, в том числе манипуляции с БД.

S.T.A.L.K.E.R.

В 2.0.16 обновлении правился скрипт в папке с дефолтной темой.Можно посмотреть что там за изменения и попробовать их откатить по порядку.Я помню что у меня при обновлении гребанулся редактор WYSIWYG и в полном ответе слетело отображение всего,осталось только окно для ввода текста.

bulatus

В логах диспетчера задач тоже ошибки. Но это уже другая история...

S.T.A.L.K.E.R.

04 Январь 2020, 22:08:38 #8 Последнее редактирование: 04 Январь 2020, 23:31:38 от S.T.A.L.K.E.R.
Цитата: bulatus от 04 Январь 2020, 09:08:55В логах диспетчера задач тоже ошибки. Но это уже другая история...
Разобрался я его и что сбивает кодировку при быстром редактировании.

Delysid

Подтверждаю..  Если редактировать таким способом сообщение происходит "полный ахтунг"  :o
 
На англоязычном форуме пишут, что починить можно заменив $themedir/scripts/script.js от версии 2.0.15

S.T.A.L.K.E.R.

Цитата: Delysid от 05 Январь 2020, 10:31:38Подтверждаю..  Если редактировать таким способом сообщение происходит "полный ахтунг"  :o
 
На англоязычном форуме пишут, что починить можно заменив $themedir/scripts/script.js от версии 2.0.15
Нефига,вчера закидывал скрипт из бекапа вообще осеннего,ломает
Помогло откатить вот это изменение в вышеуказанном файле
Код
<operation>
<search position="replace"><![CDATA[var n, sReturn = '';

for (var i = 0, iTextLen = this.length; i < iTextLen; i++)
{
n = this.charCodeAt(i);
if (n < 128)
sReturn += String.fromCharCode(n)
else if (n < 2048)
sReturn += String.fromCharCode(192 | n >> 6) + String.fromCharCode(128 | n & 63);
else if (n < 65536)
sReturn += String.fromCharCode(224 | n >> 12) + String.fromCharCode(128 | n >> 6 & 63) + String.fromCharCode(128 | n & 63);
else
sReturn += String.fromCharCode(240 | n >> 18) + String.fromCharCode(128 | n >> 12 & 63) + String.fromCharCode(128 | n >> 6 & 63) + String.fromCharCode(128 | n & 63);
}

return sReturn;]]></search>
<add><![CDATA[return this;]]></add>
</operation>
А конкретно просто удалить вот это
Код
return this;
из скрипта

Delysid

Вот код который который патчит FF и Хром:

Код
function smfSelectText(oCurElement, bActOnElement)
{
 // The place we're looking for is one div up, and next door - if it's auto detect.
 if (typeof(bActOnElement) == 'boolean' && bActOnElement)
  var oCodeArea = document.getElementById(oCurElement);
 else
  var oCodeArea = oCurElement.parentNode.nextSibling;
 if (typeof(oCodeArea) != 'object' || oCodeArea == null)
  return false;
 // Start off with my favourite, internet explorer.
 if ('createTextRange' in document.body)
 {
  var oCurRange = document.body.createTextRange();
  oCurRange.moveToElementText(oCodeArea);
  oCurRange.select();
 }
 // Firefox at el.
 else if (window.getSelection)
 {
  var oCurSelection = window.getSelection();
  // Safari is special!
  if (oCurSelection.selectAllChildren)
  {
   oCurSelection.selectAllChildren(oCodeArea);
  }
  else
  {
   var curRange = document.createRange();
   curRange.selectNodeContents(oCodeArea);
   oCurSelection.removeAllRanges();
   oCurSelection.addRange(curRange);
  }
 }
 return false;
}


Note
I replaced setBaseAndExtent by selectAllChildren because Chrome's behavior differs heavily from FF.

Indeed, according to setBaseAndExtent MDN (Mozilla) spec and introduced with FF 53
focusOffset
The number of child nodes from the start of the focus node that should be included in the selection. So for example, if the value is 0 the whole node is excluded. If the value is 1, the first child node is included. And so on.


If you got three lines of text in the code block there are 5 nodes: 3 for the text and two for the BRs, if you set focusOffset to 5 FF select all three lines

The official Spec, on which Chrome is based, is not that clear on what the focusOffset really is when both text nodes and tags are mixed within the content container. And clearly Chrome implemented it very differently from FF. So setBaseAndExtent is a no go at this time.

S.T.A.L.K.E.R.

Это с оф.форума?
Если да то дайте ссылку. Что на офе вообще по поводу этого бага говорят?

Delysid

Цитата: S.T.A.L.K.E.R. от 05 Январь 2020, 15:49:55Это с оф.форума?
Если да то дайте ссылку. Что на офе вообще по поводу этого бага говорят?
А ничего не говорят, они патчи от пользователей собрали и засунули в 2.0.16 добавив GDPR.
Вы же видите что даже не проверяли патч, ну максимум на EN версии.. Это просто закрытый гитхаб собрал патч..  2funny
Вот ссылка: https://www.simplemachines.org/community/index.php?topic=553445.20

S.T.A.L.K.E.R.

Ну мне правка то что я выше выложил помогла.Редактирование нормально во всех браузерах.На этом и остановился пока.

Minelab

27 Март 2020, 03:18:22 #15 Последнее редактирование: 27 Март 2020, 10:18:09 от Minelab
Версия 2.0.17. При быстром редактировании если редактировать на русском, тоже в уникод переводит символы. Ответ не нашел пока что. Версия 2.0.17. При быстром редактировании если редактировать на русском, тоже в уникод переводит символы. Ответ не нашел пока что.

S.T.A.L.K.E.R.

Цитата: Minelab от 27 Март 2020, 03:18:22Версия 2.0.17. При быстром редактировании если редактировать на русском, тоже в уникод переводит символы. Ответ не нашел пока что. Версия 2.0.17. При быстром редактировании если редактировать на русском, тоже в уникод переводит символы. Ответ не нашел пока что.
Мне помогло вот это выше - https://www.simplemachines.ru/index.php?msg=178311

Minelab

Пробовал, по у меня в скрипте return this; совсем в другом месте стоит

S.T.A.L.K.E.R.

Цитата: Minelab от 30 Март 2020, 15:35:19Пробовал, по у меня в скрипте return this; совсем в другом месте стоит
Удалить попробуйте. Потом через CTRL+F5 сброс кеша и проверить