cestclaire Опубликовано 11.07.2022 в 09:38 Поделиться Опубликовано 11.07.2022 в 09:38 После переезда на новый хостинг и ряда мелких работ по оптимизации на сайте стали некорректно сохраняться все текстовые блоки - неважно, в статьях ли, в описании товаров. Установить, какое именно изменение привело к такой проблеме, невозможно. Выглядит так: При создании текста в редакторе (штатный ckeditor) или через исходный код всё выглядит прекрасно, после сохранения в визуальном редакторе весь текст оказывается с html разметкой, а в исходном коде вот так magic_quotes_gpc отключены (техподдержка подтвердила) config.allowedContent = true; в config.js прописано Имеющиеся тексты не затронуло, только созданные новые или отредактированные старые. Помогите, пожалуйста. 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
nikifalex Опубликовано 11.07.2022 в 11:13 Поделиться Опубликовано 11.07.2022 в 11:13 посмотрите что именно в базе через phpmyadmin. там где правильно и там где неправильно. 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
cestclaire Опубликовано 13.07.2022 в 09:03 Автор Поделиться Опубликовано 13.07.2022 в 09:03 (изменено) В 11.07.2022 в 14:13, nikifalex сказал: посмотрите что именно в базе через phpmyadmin. там где правильно и там где неправильно. Цитата из БД начала той же статьи: &lt;p&gt;В нашем магазине вы можете оформить подарочный сертификат на любую сумму для дальнейшей отправки получателю в электронном виде.&lt;/p&gt; Цитата из старой статьи, сохраненной в адекватном виде: <p>Мы благодарны покупателям, оставляющим отзывы о наших товарах и нашей работе. Мы рады получать не только тёплые слова благодарности, но и критику, благодаря которой мы улучшаем ассортимент и сервис.</p> UPD - спасибо за подсказку, так я хотя бы могу вносить правки напрямую в БД пока не получится наладить редактор. Изменено 13.07.2022 в 17:44 пользователем cestclaire 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
AlexDW Опубликовано 13.07.2022 в 10:11 Поделиться Опубликовано 13.07.2022 в 10:11 убедитесь что в файле admin\view\javascript\ckeditor\config.js такие значения стоят: config.htmlEncodeOutput = false; config.entities = false; 1 Цитата модули для удобной работы с Opencart Ссылка на комментарий Поделиться на другие сайты Поделиться
cestclaire Опубликовано 13.07.2022 в 17:36 Автор Поделиться Опубликовано 13.07.2022 в 17:36 (изменено) 7 часов назад, AlexDW сказал: убедитесь что в файле admin\view\javascript\ckeditor\config.js такие значения стоят: config.htmlEncodeOutput = false; config.entities = false; К сожалению, не помогло. Этих строк не было, я добавила. Может быть куда-то не туда вписала? Изменено 13.07.2022 в 17:37 пользователем cestclaire 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
AlexDW Опубликовано 13.07.2022 в 18:01 Поделиться Опубликовано 13.07.2022 в 18:01 у вас явно не штатная версия редактора стоит, стандартная датирована 2012 годом попробуйте переименовать свою папку admin\view\javascript\ckeditor в ckeditor_old скопируйте оригинальную папку из дистрибутива вашей версии, обновите кеш браузера и проверьте 0 Цитата модули для удобной работы с Opencart Ссылка на комментарий Поделиться на другие сайты Поделиться
cestclaire Опубликовано 13.07.2022 в 18:04 Автор Поделиться Опубликовано 13.07.2022 в 18:04 1 минуту назад, AlexDW сказал: у вас явно не штатная версия редактора стоит, стандартная датирована 2012 годом попробуйте переименовать свою папку admin\view\javascript\ckeditor в ckeditor_old скопируйте оригинальную папку из дистрибутива вашей версии, обновите кеш браузера и проверьте Стояла штатная, была попытка поправить ситуацию обновлением редактора, но успехом она не увенчалась, проблема осталась в прежнем виде. 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
AlexDW Опубликовано 13.07.2022 в 18:25 Поделиться Опубликовано 13.07.2022 в 18:25 сравните файл system\library\request.php с файлом из дистрибутива (если стоит vqmod - то сравнивайте измененный файл, если он там есть) 1 Цитата модули для удобной работы с Opencart Ссылка на комментарий Поделиться на другие сайты Поделиться
cestclaire Опубликовано 13.07.2022 в 18:33 Автор Поделиться Опубликовано 13.07.2022 в 18:33 1 минуту назад, AlexDW сказал: сравните файл system\library\request.php с файлом из дистрибутива (если стоит vqmod - то сравнивайте измененный файл, если он там есть) Открыла в соседних вкладках, совершенно идентичны. В кэше vqmod request.php нет. ckeditor тоже поставила тот, что был в дистрибутиве - ничего не изменилось. Ну то есть редактор изменился, видно что другая, явно более старая версия, но проблема сохранилась. Цитата config.htmlEncodeOutput = false; config.entities = false; Две эти строки уже стояли. Пробовала дописать еще config.allowedContent = true; (по совету другого специалиста), тоже никаких изменений. Кэш после каждого изменения каждый раз чищу весь, в браузере тоже. Большое спасибо что пытаетесь помочь. Я, если честно, близка к отчаянию. 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Tom Опубликовано 14.07.2022 в 03:41 Поделиться Опубликовано 14.07.2022 в 03:41 Попробуйте всё же вариант с заменой редактора. Но только теперь не чистите кэш, а откройте магазин в режиме Инкогнито. 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
AlexDW Опубликовано 14.07.2022 в 06:17 Поделиться Опубликовано 14.07.2022 в 06:17 попробуйте поменять название какого-нибудь товара, добавьте кавычки, сохраните пару раз и смотрите, что будет в названии и что фактически в БД 1 Цитата модули для удобной работы с Opencart Ссылка на комментарий Поделиться на другие сайты Поделиться
cestclaire Опубликовано 14.07.2022 в 09:26 Автор Поделиться Опубликовано 14.07.2022 в 09:26 (изменено) 5 часов назад, Tom сказал: Попробуйте всё же вариант с заменой редактора. Но только теперь не чистите кэш, а откройте магазин в режиме Инкогнито. Привет! Я не думаю, что проблема может быть хоть сколько-то в браузере. Она проявляется на разных устройствах совершенно одинаково. Плюс мне также кажется, что проблема даже и не в редакторе - изначально я её заметила при работе с batch editor и массовым добавлением заготовленных шаблонов в description (текст с html разметкой, например заголовок "таблица размеров", затем сама таблица вставленным изображением). И если раньше всё добавлялось правильно, визуально верно со стороны витрины, то в тот раз я увидела, что блоки добавляются с html разметкой не в исходный код, а в конечный. Написала разработчику, он покрутил, посмотрел, и мы с ним обнаружили, что проблема не в batch editor, а во всех текстовых блоках на сайте. Так вот, почему я считаю, что проблема даже не в редакторе - я использовала готовые шаблоны, которые были созданы и сохранены до возникновения проблемы, и она их не затронула, как и прочие старые тексты, и по идее они по команде должны дописываться в заданное место сразу в БД, но записываются уже в искажённом виде. Редактор в данном случае используется исключительно для просмотра итогового результата. Изменено 14.07.2022 в 09:27 пользователем cestclaire 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
nikifalex Опубликовано 14.07.2022 в 09:29 Поделиться Опубликовано 14.07.2022 в 09:29 сталкивался я с этой проблемой лет 10 назад тоже на opencart 1.5 Но никак не могу вспомнить как это исправляется. Если я не путаю, то дело именно в настройках хостинга и конфликте с какими то вещами в opencart. типа magic_quotes_gpc но что-то другое, подобное. и если на не путаю, эта похожая проблема на проблему с поиском русских слов или кавычек 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
cestclaire Опубликовано 14.07.2022 в 09:37 Автор Поделиться Опубликовано 14.07.2022 в 09:37 3 часа назад, AlexDW сказал: попробуйте поменять название какого-нибудь товара, добавьте кавычки, сохраните пару раз и смотрите, что будет в названии и что фактически в БД Вы правы, в названии тоже преобразуются символы. Вписала в название Проверка названия " < >, после сохранения вижу Проверка названия " < > 4 минуты назад, nikifalex сказал: сталкивался я с этой проблемой лет 10 назад тоже на opencart 1.5 Но никак не могу вспомнить как это исправляется. Если я не путаю, то дело именно в настройках хостинга и конфликте с какими то вещами в opencart. типа magic_quotes_gpc но что-то другое, подобное. и если на не путаю, эта похожая проблема на проблему с поиском русских слов или кавычек Я тоже уверена, что дело в каких-то настройках, потому что проблема возникла после переезда на новый хостинг - однако получается, что утверждать на 100% я не могу, потому как после переезда была еще пара доработок по оптимизации. И вышло так, что к работе с текстовыми блоками я приступила уже после всех этих доработок. 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
AlexDW Опубликовано 14.07.2022 в 13:51 Поделиться Опубликовано 14.07.2022 в 13:51 3 часа назад, cestclaire сказал: Вы правы, в названии тоже преобразуются символы. Вписала в название Проверка названия " < >, после сохранения вижу Проверка названия " < > значит редактор здесь ни при чем если проблема носит массовый характер, вероятно причина либо в настройках сервера mysql, либо в настройках соединения с ним, либо в структуре БД убедитесь что в настройках БД MySQL-кодировка: UTF-8 Unicode (utf8) Сопоставление соединения с MySQL: utf8_unicode_ci сравните с оригиналами свои файлы system\library\db.php system\database\mysql.php system\database\mysqli.php (при сравнении не забывайте про vqmod) 1 Цитата модули для удобной работы с Opencart Ссылка на комментарий Поделиться на другие сайты Поделиться
mpn2005 Опубликовано 14.07.2022 в 18:33 Поделиться Опубликовано 14.07.2022 в 18:33 В 13.07.2022 в 12:03, cestclaire сказал: Цитата из БД начала той же статьи: &lt;p&gt;В нашем магазине вы можете оформить подарочный сертификат на любую сумму для дальнейшей отправки получателю в электронном виде.&lt;/p&gt; Цитата из старой статьи, сохраненной в адекватном виде: <p>Мы благодарны покупателям, оставляющим отзывы о наших товарах и нашей работе. Мы рады получать не только тёплые слова благодарности, но и критику, благодаря которой мы улучшаем ассортимент и сервис.</p> Похоже, что на каком-то этапе происходит повторное экранирование HTML сущностей. Вот что получается: Оригинал: <p> Первое преобразование: <p> < - это < > - это > Второе преобразование: &lt;p&gt; & - Это уже ненужная замена & на & Как костыль - можно на фронте два раза описание прогнать через html_entity_decode После вот такой строки в catalog/controller/product/product.php: $this->data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8'); Добавить ещё один прогон: $this->data['description'] = html_entity_decode($this->data['description'], ENT_QUOTES, 'UTF-8'); Но вообще надо разбираться, где вклинивается лишнее преобразование html сущностей. Штатное проходит в библиотеке system/library/request.php там все _GET и _POST прогоняются через функцию htmlspecialchars Но в данном случае, похоже, есть ещё какой-то лишний прогон. Может вклинивается какой-то модуль. Может и хостинг шалить, тут ничего нельзя исключать. 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
cestclaire Опубликовано 17.07.2022 в 12:55 Автор Поделиться Опубликовано 17.07.2022 в 12:55 (изменено) В 14.07.2022 в 21:33, mpn2005 сказал: Как костыль - можно на фронте два раза описание прогнать через html_entity_decode К сожалению, костыль не помог - строку вставила, весь кэш почистила, проблема осталась. UPD - прошу прощения, затупила, вы же написали что на фронте, а я продолжила проверять повторным просмотром текста в админке. Действительно, на фронте всё прилично, двойное кодирование расшифровывается. И я теперь терзаюсь - вроде можно продолжать работать (а то я уже три недели не могу добавлять товары на сайт, там каждый раз нужна доработка description), а вроде и не хочется засорять БД тем кривым кодом, что продолжает туда писаться. В 14.07.2022 в 16:51, AlexDW сказал: убедитесь что в настройках БД MySQL-кодировка: UTF-8 Unicode (utf8) Сопоставление соединения с MySQL: utf8_unicode_ci Сопоставление было utf8_general_ci, я исправила на utf8_unicode_ci, но тоже ничего не поменялось. В 14.07.2022 в 16:51, AlexDW сказал: сравните с оригиналами свои файлы system\library\db.php system\database\mysql.php system\database\mysqli.php system\database\mysqli.php идентичен system\library\db.php различается на одну строку в оригинале и в кэше vqmod в оригинале: require_once(DIR_DATABASE . $driver . '.php'); в кэше vqmod: require_once(\VQMod::modCheck(DIR_DATABASE . $driver . '.php')); system\database\mysql.php различается вместо вот этих строк public function query($sql) { if ($this->link) { $resource = mysql_query($sql, $this->link); в файле на сайте находится вот такой кусок кода public function query($sql) { if ($this->link) { $sysstart = microtime(true); $resource = mysql_query($sql, $this->link); $row = array(); if(DEBUG){ $caller = debug_backtrace(); $row['file'] = $caller[1]['file']; $row['line'] = $caller[1]['line']; $row['Duration'] = round(( microtime(true) - $sysstart), 5); $row['Query'] = $sql; Debug::$_profs[] = $row; } Остальное идентично. Большое спасибо, что пытаетесь помочь. Изменено 17.07.2022 в 13:03 пользователем cestclaire 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Решение AlexDW Опубликовано 17.07.2022 в 13:44 Решение Поделиться Опубликовано 17.07.2022 в 13:44 9 минут назад, cestclaire сказал: Сопоставление было utf8_general_ci, я исправила на utf8_unicode_ci тогда верните как было, хотя в принципе особой разницы нет 17 минут назад, cestclaire сказал: в оригинале: ... вместо вот этих строк здесь нет ничего, что влияло бы на двойное преобразование получается, либо на самом сервере какая-то настройка такое дает либо где-то в коде вашего движка но вроде все доступные в коде места, где такое могло быть, просмотрели еще, в виде эксперимента - попробуйте в файле system\library\request.php заменить строку $data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8'); на $data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8', false); потом создайте новую статью в админке, с кавычками и тд, сохраните и посмотрите 3 Цитата модули для удобной работы с Opencart Ссылка на комментарий Поделиться на другие сайты Поделиться
cestclaire Опубликовано 17.07.2022 в 14:00 Автор Поделиться Опубликовано 17.07.2022 в 14:00 13 минут назад, AlexDW сказал: еще, в виде эксперимента - попробуйте в файле system\library\request.php заменить строку $data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8'); на $data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8', false); Сработало! Теперь адекватно отображается и в админке, и на фронте. Спасибо вам большое 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
AlexDW Опубликовано 17.07.2022 в 15:49 Поделиться Опубликовано 17.07.2022 в 15:49 1 час назад, cestclaire сказал: Сработало! Теперь адекватно отображается и в админке, и на фронте. главное потом про эту правку не забудьте, если вдруг где-то что-то побочное всплывет это больше "костыльное" решение, по уму нужно первопричину двойного кодирования устранить но мысли пока кончились по этому поводу разве что у вас где-то идет переопределение самой функции htmlspecialchars 0 Цитата модули для удобной работы с Opencart Ссылка на комментарий Поделиться на другие сайты Поделиться
cestclaire Опубликовано 17.07.2022 в 15:52 Автор Поделиться Опубликовано 17.07.2022 в 15:52 Я пока отметила как решённое, но тема остаётся открытой, может кому-то что-то придёт в голову. Спасибо большое 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
cestclaire Опубликовано 18.07.2022 в 11:13 Автор Поделиться Опубликовано 18.07.2022 в 11:13 Итак, я могла бы стыдливо промолчать, но я смело признаюсь, что вся проблема оказалась в том, что я долблюсь в глазки. Проблему решил без костылей фикс от разработчика модуля оптимизации БД (индексы и кэш), о котором было написано в мануале, который я честно читала, да главное упустила. Необходимо было заменить файл system\library\request.php на содержащий следующий код: <?php class Request { public $get = array(); public $post = array(); public $cookie = array(); public $files = array(); public $server = array(); protected static $im_is_cleaned = false; public function __construct() { if (!Request::$im_is_cleaned) { $_GET = $this->clean($_GET); $_POST = $this->clean($_POST); $_REQUEST = $this->clean($_REQUEST); $_COOKIE = $this->clean($_COOKIE); $_FILES = $this->clean($_FILES); $_SERVER = $this->clean($_SERVER); Request::$im_is_cleaned = true; } $this->get = $_GET; $this->post = $_POST; $this->request = $_REQUEST; $this->cookie = $_COOKIE; $this->files = $_FILES; $this->server = $_SERVER; } public function clean($data) { if (is_array($data)) { foreach ($data as $key => $value) { unset($data[$key]); $data[$this->clean($key)] = $this->clean($value); } } else { $data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8'); } return $data; } } ?> и всё заработало без костылей. Ещё раз спасибо всем тем, кто пытался помочь и помог, а тема останется в помощь тем, кто столкнется с той же проблемой и в назидание потомкам - RTFM! 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
nikifalex Опубликовано 18.07.2022 в 12:09 Поделиться Опубликовано 18.07.2022 в 12:09 55 минут назад, cestclaire сказал: фикс от разработчика модуля оптимизации БД (индексы и кэш) а можно ссылку то на этот модуль? уж очень он загадочный 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
cestclaire Опубликовано 18.07.2022 в 12:13 Автор Поделиться Опубликовано 18.07.2022 в 12:13 https://shop.opencart-russia.ru/imdboptimizer15 Покупала здесь. На этом форуме модуля вроде бы нет. Сам модуль сработал прекрасно, нагрузка на MySQL снизилась в 100 раз. 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
cestclaire Опубликовано 18.07.2022 в 12:14 Автор Поделиться Опубликовано 18.07.2022 в 12:14 5 минут назад, nikifalex сказал: а можно ссылку то на этот модуль? уж очень он загадочный https://shop.opencart-russia.ru/imdboptimizer15 Покупала здесь. На этом форуме модуля вроде бы нет. Сам модуль сработал прекрасно, нагрузка на MySQL снизилась в 100 раз. 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.