Użytkownicy sklepów PrestaShop 1.7 mogą natrafić na dość nieznośny problem z kodowaniem polskich znaków. Objawia się on „krzaczkami” (czy raczej pytajnikami..) w tekstach na sklepie – opisach produktów, ich nazwach, nazwach kategorii itd.
Rozwiązanie nie pomaga... wciąż są krzaki lub znaki zapytania na zapleczu w sklepie PrestaShop 1.7.x.x.
Jeżeli wprowadzona zmiana w pliku konfiguracyjnym sklepu opartego na PrestaShop 1.7, możesz dodatkowo wykonać poniższe kroki.
Bezpieczeństwo pracy w standardzie?
Użytkownicy dzielą się na dwie grupy:
tych, którzy robią kopie bezpieczeństwa i tych, którzy jeszcze jej nie robią…
Wykonuj kopię bezpieczeństwa plików i bazy danych jeżeli chcesz uniknąć niespodzianek xD
Kopia bezpieczeństwa bazy PS17
Jak wykonać kopię bezpieczeństwa bazy danych w PrestaShop? Najszybciej będzie przez panel administracyjny wykorzystując do tego celu zintegrowane funkcjonalności dostępne w zaawansowanej konfiguracji z poziomu menu nawigacyjnego na zapleczu sklepu.
KONFIGURUJ ➤ Zaawansowane ➤ Baza danych ➤ Kopia zapasowa DB
(...) - utwórz nową kopię zapasową
W pliku ./app/config/doctrine.yml należy dodać "NAMES 'UTF8'" po przecinku jako parametr dla zapytania MySQL SELECT.
options:
1002: "SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')),"
Po edycji powinno wyglądać tak:
options:
1002: "SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')), NAMES 'UTF8'"
Sposób na polskie znaki w preście (sprawdzone na wersjach PrestaShop 1.7.7.8, 1.7.8.0, 1.7.8.1, 1.7.8.2).
Cała zawartość pliku doctrine.yml:
Naprawa kodowania na poziomie skryptu PHP
Otwórz plik classes/db/DbPDO.php
Znajdź funkcję connect() a następnie przed linią z kodem $this->link->exec('SET SESSION sql_mode = \'\''); wstaw poniższy kod PHP:
// 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.'.$e->getMessage());}
Kodowanie szablonu
Włącz dowolną podstonę sklepu albo stronę główną i wciśnij: CTRL + U. W źródle strony upewnij się, że w sekcji <HEAD> na początku kodu HTML jest zawarty znacznik określający kodowanie typu:
Ważna jest tutaj wartość atrybutu meta charset i musi być ona zdeklarowana jako "utf-8". Jeżeli u Ciebie brak tej linijki kodu html możesz skopiować i wkleić poniższy fragment:
<meta charset="utf-8">
Kolejnym krokiem jest oczywiście indywidualny test skuteczności i ewentualne przejście do kolejnego kroku.
Sprawdź kodowanie bazy danych MySQL
- Na poziomie tworzenia bazy danych w panelu hostingowym powinna mieć ona kodowanie: UTF8. Skontaktuj się dla pewności w tej sprawie z administatorem serwera.
- W programie PhpMyAdmin wybierz opcję „Databases” i na liście baz danych upewij się czy baza posiada kodowanie UTF8 np. utf8_polish_ci
- Wybierz bazę danych i na liście tabel w kolumnie „Collation” (kodowanie) upewnij się, że tabele też mają kodowanie UFT8 np. utf8_general_ci albo utf8_polish_ci
- Otwórz dowolną tabelę językową np. ps_cms_lang lub pr_product_lang i upewnij się, że teksty w niej zawarte mają polskie znaki diakrytyczne (kliknij „edytuj” na dowolnym wierszu – nic nie zmieniając i nic nie zapisując)
OK – jeśli wszystko się zgadza – baza danych ma prawidłowe kodowanie i nie jest to przyczyną błędów.
Sprawdź jak zapisywany jest tekst z polskimi znakami
Utwórz nową stronę CMS z tekstem z pl. literami
- Wejdź w dział strony CMS (jeśli nie widzisz go w menu admina sklepu wejdź pod adres: http://{adres-sklepu}.pl/{admin}/index.php?controller=AdminCmsContent&token={token} (Oczywiście w klamrach podaj dane Twojego sklepu).
- Dodaj nową stronę CMS, w jej treści wpisz: „zażółć gęślą jaźń ZAŻÓŁĆ GĘŚLĄ JAŹŃ” (przykładowy tekst sprawdzający wszystkie poliskie litery).
- Jeśli na poziomie bazy danych w programie PhpMyAdmin w tabeli ps_cms_lang zamiast poliskich liter pojawia się niezrozumiały tekst typu „zaşóĹÄ gÄĹlÄ jaźŠZAĹťĂĹÄ GÄĹLÄ” oznacza to błędne kodowanie na poziomie skrytpu i nasz sposób naprawy powinien zadziałać.
DrSpinner®