[Решено] Проблема с кодировкой в Атрибутах карточки товара PS 1.7.4.2

vitos1401

Мой дом здесь!
Регистрация
3 Ноя 2012
Сообщения
191
Реакции
455
Приветствую всех! Имеет место проблема с кодировкой (Prestashop 1.7.4.2) ТОЛЬКО при отображении Атрибутов и Групп атрибутов в комбинациях карточки товара.

- Для решения возможных (и существующих) проблем с кодировкой перед установкой Prestashop в файл DbPDO.php было добавлено в функцию connect() :
.......................
public function connect()
{
try {
$this->link = $this->getPDO($this->server, $this->user, $this->password, $this->database, 5);
} catch (PDOException $e) {
throw new PrestaShopException('Link to database cannot be established: '.$e->getMessage());
}
// UTF-8 support
if ($this->link->exec('SET NAMES \'utf8\'') === false) {
throw new PrestaShopException('PrestaShop Fatal error: no utf-8 support. Please check your server configuration.');
}

$this->link->exec('SET SESSION sql_mode = \'\'');
return $this->link;
}
.......................

После установки, настройки, заполнением товарами - Кодировка ВЕЗДЕ отображается верно:
- При создании нового атрибута - правильные символы
- При создании новой Группы атрибутов - правильные символы
- Все уже созданные Атрибуты и Группы атрибутов - правильные
- Отображение атрибутов во фронт-офисе магазина в категориях и на странице товара - правильное
- Отображение в email-сообщениях при подтверждении заказа - правильное
- Вообще нигде - ни в бэк-офисе, ни во фронте никаких проблем с кодировкой нет

НО... ТОЛЬКО в админке в карточке товара при открытии вкладки Комбинации вместо Атрибутов и Групп атрибутов - кракозябры.

Жуткое неудобство - приходится имена и группы Атрибутов для админки прописывать транслитом - иначе при добавлении комбинаций невозможно понять где и какой атрибут - сплошь знаки вопросов....... (скрин прилагаю)

- Кодировка БД, таблиц, полей таблиц - везде utf8_general_ci
- Кодировка сервера: UTF-8 Unicode (utf8)
- Все файлы в кодировке: UTF-8

Сервер: Apache/2.2.29
Версия клиента базы данных: libmysql - 5.6.33-79.0
Версия php: PHP 7 (current stable)
Хостинг: sweb

Прошу дельного совета: как исправить?
(переустановка Престы исключается. Доводилось слышать решение, связанное с переездом на другой хостинг - но интересует как "победить" без переезда)

UPD: директива AddDefaultCharset utf-8 в .htaccess имеется - но результат нулевой
 

Вложения

  • 2.jpg
    2.jpg
    374,6 KB · Просмотры: 13
Последнее редактирование:
Прошу дельного совета: как исправить?
В .htaccess добавьте в начало AddDefaultCharset utf-8

Если не поможет, то через инструменты разработчика отследить ajax запросы, через которые заполняются те блоки и напрямую через урлы посмотреть, что возвращают скрипты именно в браузер, а не внутрь в контент страницы - кракозябры или нет. После этого надо будет разбираться дальше.
 
В .htaccess добавьте в начало AddDefaultCharset utf-8


Благодарю, за помощь.. Просто забыл упомянуть, что это эту директиву я тоже добавил еще в самом начале - результат нулевой

Если не поможет, то через инструменты разработчика отследить ajax запросы, через которые заполняются те блоки и напрямую через урлы посмотреть, что возвращают скрипты именно в браузер, а не внутрь в контент страницы - кракозябры или нет. После этого надо будет разбираться дальше.

Буду пробовать

Если не поможет, то через инструменты разработчика отследить ajax запросы, через которые заполняются те блоки и напрямую через урлы посмотреть, что возвращают скрипты именно в браузер, а не внутрь в контент страницы - кракозябры или нет. После этого надо будет разбираться дальше.

Добрый! Спасибо, что придали направление для поиска проблемы.
Ajax-запросы определил. Задействованы 2 java-скрипта: attributes.js и product-combinations.js . Они отправляют ajax-запросы в правильной кодировке, но сервер отдает скрипту JSON уже с неверной кодировкой.
В качестве решения пробовал прописать директивы

AddType 'application/javascript; charset=UTF-8' js
AddCharset UTF-8 .js
в .htaccess

и добавить

header('Content-type: text/html; charset=utf8'); в начало ajax.php
(или может 'Content-type', в котором указан charset не используется в GET-запросах?)

Но результата пока нет. Посоветуйте еще варианты.
Может быть пробовать escape-последовательностями:

encodeURI() или encodeURIComponent() ?

Проблема пока так и не решилась... Может у кого есть новые соображения на этот счет?
 
Последнее редактирование модератором:

Вложения

  • Заголовки.jpg
    Заголовки.jpg
    97,9 KB · Просмотры: 6
  • JSON.jpg
    JSON.jpg
    78,7 KB · Просмотры: 7
  • Необработанные данные.jpg
    Необработанные данные.jpg
    782 KB · Просмотры: 6
  • Красивая печать.jpg
    Красивая печать.jpg
    78,4 KB · Просмотры: 6
В адресной строке вот так: ....../admin653125aqnwhi/index.php/attribute/get-all?_token=ebXKyFqmVwU1yoLPbKl-9QfO3JLxwJ0xzFG6zBDmC9U
Скрины с JSON ниже.
Да все ок с JSON, так ответ этого скрипта и кодируется, проверил у себя и на нескольких клиентских сайтах. Попробуйте в другом браузере. Сильные подозрения, что сервер с престой тут не причем. Браузер получает результат от скрипта и криво его просто отображает, именно на своей стороне.
 
Последнее редактирование:
Да все ок с JSON, так ответ этого скрипта и кодируется, проверил у себя и на нескольких клиентских сайтах. Попробуйте в другом браузере. Сильные подозрения, что сервер с престой тут не причем. Браузер получает результат от скрипта и криво его просто отображает, именно на своей стороне.

Да, проверил: Chrome, Firefox, Opera, Edge - везде кракозябры... к сожалению
 
Да, проверил: Chrome, Firefox, Opera, Edge - везде кракозябры... к сожалению
Попросите кого-то из знакомых со своего компа зайти, сделайте временный логин. Ну не верю что преста виновата.
 
Попросите кого-то из знакомых со своего компа зайти, сделайте временный логин. Ну не верю что преста виновата.

Да, уже приходила такая идея - пытались зайти и с других компов, даже на смартфоне (Android - Chrome) - все также печально.
 
Да, уже приходила такая идея - пытались зайти и с других компов, даже на смартфоне (Android - Chrome) - все также печально.
Ну тогда попробуем по-взрослому.
В файле /src/PrestaShopBundle/Controller/Admin/AttributeController.php после 87-ой строки добавьте новую:

$response->setEncodingOptions(JSON_UNESCAPED_UNICODE);

Это скажет скрипту вернуть чистый юникод без всяких /uXXX, посмотрим как ваша админка на это отреагирует.
 
Назад
Сверху