Press "Enter" to skip to content

Poprawa wyświetlania polskich znaków w sklepie PrestaShop 1.7

Admin 18

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.Tak samo w zapleczu sklepu pojawiają się nieprawidłowości. Wręcz brak jest opcji w menu administracyjnym sklepu. Opisane tutaj błędy mogą sygnalizować błędy w bazie danych, lecz niekoniecznie.

Poniżej poradnik jak można spróbować naprawić te błędy.

Kopia bezpieczeństwa

W myśl hasła “Użytkownicy dzielą się na dwie grupy: ci co robią kopie bezpieczeństwa i ci co jeszcze nie robią kopii bezpieczeństwa…”:

Przed podjęciem zmian wykonaj koniecznie:

1) kopie zapasowe plików (FTP) oraz

2) bazy danych:

Zaawansowane -> Baza danych -> Kopia bazy DB -> Wykonaj kopię

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 – musi być ona zdeklarowana jako utf-8

Checklista – sprawdź kodowanie bazy danych.

  1. Na poziomie tworzenia bazy danych w panelu hostingowym powinna mieć ona kodowanie: UTF8. Skontaktuj się dla pewności w tej sprawie z administatorem serwera.
  2. W programie PhpMyAdmin wybierz opcję “Databases” i na liście baz danych upewij się czy baza posiada kodowanie UTF8 np. utf8_polish_ci
  3. 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
  4. 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.

Opcjonalnie. Sprawdź jak zapisywany jest tekst z polskimi znakami.

Utwórz nową stronę CMS z tekstem z pl. literami

  1. 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).
  2. 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).
  3. 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ć.

Naprawa kodowania na poziomie skryptu (w PHP)

Otwórz plik:

Znajdź funkcję:

Następnie w okolicach linii 121 przed kodem:

Wstaw:

Daj znać w komentarzu czy u Ciebie to zadziałało 🙂

 

 

grafika: Michelle Bodamer, peakpx.com, MichelleBodamer.com

  1. Piotr Piotr

    Zadziałało ale np. tytuły stron w zakładce seo&url czy nazwy atrybutów produktu w panalu admin nadal są źle kodowane.

    • Admin Admin

      może zostały wprowadzone na złym kodowaniu w skrypcie? wtedy wpisy są błędne i w PHPmyadmin też będą źle wyświetlone. Inna przyczyna to że ich pola w bazie danych mają ustawione złe kodowanie znaków. ciężko powiedzieć.

      • Piotr Piotr

        Przepraszam ale nie jestem na tyle zaawansowany. Co to znaczy na złym kodowaniu w skrypcie ?

  2. jane jane

    U mnie zadziałało. Dzięki 🙂

  3. Grześku Grześku

    Po pierwsze miałem złe kodowanie, dwa mimo zmiany kodowania dalej krzaki.

    Na szczęście zmiana w DbPDO.php załatwiła sprawę – dzięki za poradnik!

  4. Roger Roger

    działa, ale zastanawia mnie gdzie leży faktyczna przyczyna problemu;
    mam działający sklep postawiony na hostingu A, chciałem wytestować jak będzie działał na dedykowanym hostingu pod PrestaShop w home (do testów triale 14 dni);
    co ciekawe miesiąc temu przerzucałem całą Prestę i wszytko chodziło od strzała;
    a dziś po po raz pierwszy zdarzyło mi się, żeby po przeprowadzce wystąpił taki problem z kodowaniem (czyli krzaki zamiast polskich znaków w opisach i nazwach produktów, wybrakowane menu w backoffice);

  5. Konrad Konrad

    Migracja z Linux na Home spowodowała taki błąd. Metoda zadziałała!

  6. Kamil Kamil

    U mnie ruszyło ale teraz cały panel zarządzania presta nie posiada polskich znaków. Pola np. Płatności, Moduły, Wygląd, Wysyłka są bez polskich znaków. Ponadto przy cenach nie wyświetla się nie wyświetla w “zł” polskich znaków. Za to kategorie i opisy produktów są już wyświetlane poprawnie.
    Nie wiem jak to ugryźć

  7. Dla większości rzeczy faktycznie to zadziałało, ale…
    W kategoriach (Katalog -> Kategorie) na liście mam krzaczki (w opisie i nazwie), ale jak wezmę edycję to już się wyświetla poprawnie. I jak wprowadzę tam poprawnie to znowu na liście są krzaczki (w sklepie jest OK).
    Czyżby to nie korzystało z PDO?

  8. Rozwiązanie które tutaj jest przedstawione w tym artykule nie jest do końca dobre (chociażby z powodów o których napisałem w powyższym komentarzu)
    Szczęśliwie znalazłem powód tego problemu (jak i też rozwiązanie nie wymagające zmiany kodu presty).
    Dla potomnych: presta przesyła literki na stronę dokładnie tak jak dostaje z bazy i wymusza w przeglądarce kodowanie utf8. Jeśli w bazie (na skutek ustawień bazy, ustawień starej presty czy z jakiegokolwiek innego powodu) są znaki zakodowane w iso-8859-2 (lub innym kodowaniu w przypadku innych języków) to wyświetlają się źle. Dotyczy to zarówno produktów jak i kategorii i ustawień w menu itd (praktycznie wszystko jest zaciągane z bazy).
    Rozwiązaniem jest przekonwertowanie bazy do utf8. Trzeba ją niestety pobrać do pliku tekstowego, zmienić kodowanie i wgrać na nowo – np do nowej bazy i przełączyć tylko wskazanie bazy w konfiguracji presty (można oczywiście nazwę starej bazy zmienić i utworzyć nową o tej samej nazwie i do niej wgrać dumpa, wtedy nie trzeba nic zmienić w konfiguracji presty oczywiście).

  9. Michal M. Michal M.

    Niestety u mnie nie pomogło, cała baza, jak i tabele są w utf_unicode. Połączenie ustawione utf8. W Adminie, jak whcodzę w tłumaczenia mam ładnie polskie znaki, jak coś zapisuję z polskimi znakami to w adminie też ładnie się wyświetla. Niestety w bazie i na froncie wyświetlają się krzaczki. Jak spróbuję zmienić bezpośrednio w bazie tak aby były ładnie polskie znaki to na froncie jest ładnie OK, ale wtedy nie chce się otworzyć strona z tłumaczeniem (komunikat: “Malformed UTF-8 characters, possibly incorrectly encoded”)

  10. Michał M. Michał M.

    @Admin, znalazłem dodatkowe rozwiązanie problemu które u mnie występowało nadal po wprowadzeniu powyższych uwag.

    Moduł tłumaczeń w adminie używa doctrine który zaczytuje całkiem z innego miejsca ustawienia połączenia z bazą przez co tłumaczenia zapisywały się do bazy oraz wyświetlały się na froncie z krzakami (mimo poprawnego wyświetlania w adminie), dlatego w pliku app/config/condig.yml mniej więcej w linii 86 należy:

    1002: “SET sql_mode=(SELECT REPLACE(@@sql_mode,’ONLY_FULL_GROUP_BY’,”))”
    zmienić na:
    1002: “SET sql_mode=(SELECT REPLACE(@@sql_mode,’ONLY_FULL_GROUP_BY’,”)), NAMES ‘UTF8′”

    Zmiana ta spowodowała, że u mnie działa jak marzenie 🙂

  11. Grześku Grześku

    Mały update do wpisu Michała M.
    W presta 1.7.7.3 zmianę należy wprowadzić w pliku:
    /app/config/doctrine.yml

    w powyższym wpisie są też nieprawidłowe apostrofy i cudzysłowy, przez co skrypt potrafi wysypać stronę.
    Wklejam ponownie, zakładam że edytor tekstowy komentarzy niczego nie zmieni 😉

    1002: “SET sql_mode=(SELECT REPLACE(@@sql_mode,’ONLY_FULL_GROUP_BY’,”)), NAMES ‘UTF8′”

    btw- działa, mi pomogło.
    Dzięki Michał M.

    • Grześku Grześku

      Widzę, że jednak edytor automatycznie zmienia znaki…
      UWAGA: przed zapisaniem pliku zmieńcie: ′ oraz ” – wystarczy wpisać je bezpośrednio z klawiatury

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

Zobacz także !
Jak w PrestaShop 1.7 usunąć wybór płci przez klienta w…