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

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

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

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

bulatus

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

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

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

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

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

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

handself


bulatus


Yarik


Сан

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

bulatus

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

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

Yarik

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

bulatus

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

Yarik

#8
Цитата: bulatus от 04 января 2020, 09:08:55В логах диспетчера задач тоже ошибки. Но это уже другая история...
Разобрался я его и что сбивает кодировку при быстром редактировании.

Delysid

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

Yarik

Цитата: 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.

Yarik

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

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

Yarik

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

Minelab

#15
Версия 2.0.17. При быстром редактировании если редактировать на русском, тоже в уникод переводит символы. Ответ не нашел пока что. Версия 2.0.17. При быстром редактировании если редактировать на русском, тоже в уникод переводит символы. Ответ не нашел пока что.

Yarik

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

Minelab

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

Yarik

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

ALLIGATOR-J

На 2.0.017 присутствует такая проблема. Return this вообще в другом месте когда искал. Как ещё можно решить проблему?

ALLIGATOR-J

Обновил на 2.0.18 - проблема сохранилась. Они там не знают об этом что ли?


ALLIGATOR-J

Цитата: digger® от 02 февраля 2021, 14:21:11Обновил 2.0.15->2.0.16->2.0.17->2.0.18, быстрое редактирование без проблем.
Сбросил кэш, вроде и правда работает...