Jump to content
  • 0

Kodowanie polskich znaków na zapleczu jest niewłaściwe w nowej instalacji. 1.7.8.2


rkonik

Question

Dzień dobry.

Nie mam pojęcia na czym polega problem i co jest nie tak z kodowaniem polskich znaków na zapleczu.
Przed instalacją PS sprawdziłem wymogi skryptem udostępnionym przez autora szablonu https://github.com/PrestaShop/php-ps-info

Wszystko przeszło pozytywnie. Zainstalowałem PS wraz z szablonem. Instalacja jest bez danych demo z PS i szablonu.

W chwili odkrycia błędu pierwsze co sprawdziłem to kodowanie w Bazie danych okazuje się że w zależności od tabeli jest to utf8mb4_general_ci i utf8_general_ci

Sprawdziłem konkretnie i dokładnie tabelę #_cms_lang i okazuje się że wszystkie Polskie znaki są prawidłowe.
Od strony frontu sklepu również pokazuje znaki pokazują się poprawnie.

Problem jest np na liście Stron gdzie jest niepoprawne kodowanie (widzę krzaki) Co dziwne jak kliknę edycję to znaki są prawidłowe i mogę je edytować i zapisują się poprawnie.

Znalazłem coś takiego ale to nic nie wnosi: https://github.com/PrestaShop/PrestaShop/issues/23988

Problem występuje wyłącznie od strony zaplecza. Czy ktoś jest w stanie mi pomóc jak to rozwiązać?

 

edit:

Słuchajcie postanowiłem wyczyścić całą bazę i pliki. Ponownie zainstalowałem PS 1.7.8.2 zgodnie z instrukcją w pliku INSTALL.TXT Co ciekawe sama presta podczas instalacji tworzy tabele z różnymi metodami porównywania napisów. O co chodzi? Coś z instalatorem jest nie tak?

 

Edited by rkonik (see edit history)
Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0

Witaj.

Jaki to szablon, może nie jest dostosowany do wersji 1.7.8.2. Niestety jak można zauważyć to twórcy szablonów / modułów z automatu piszą, że jeśli wszystko działa pod 1.7.8, to będzie działało pod najnowszą wersję.

Jeśli masz domenę, sub domenę do testowania, to zainstaluj np 1.7.7 i sprawdź ten szablon, czy to aby nie jest problemem. Tak, to będziesz zafiksowany nad jednym rozwiązaniem w kółko.

Link to comment
Share on other sites

  • 0

Witaj.

Wywaliłem wszystko i zainstalowałem czystą Prestę. Problem dalej istnieje.

Tak jak pisałem wcześniej od frontu jest ok i w samej bazie danych jest ok. Mimo że kodowanie znaków jest różne w tabelach. Natomiast w zapleczu widzę znaczki.

Ktoś ma jakiś pomysł co może być przyczyną?

Link to comment
Share on other sites

  • 0

Czy komuś udało się osiągnąć polskie znaki w każdym elemencie na zapleczu? Dzisiaj robiłem upgrade do 1.7.8.7 z wersji 1.7.5.0 i zaplecze mam w dużej części bez polskich znaków. Np status płatności "Oczekiwanie na pĹatnoĹÄ przelewem",

"ObsĹuga klienta"

"Menedżer modułów>ModuĹy"

 

Dodam, że

1002: "SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')), NAMES 'UTF8'"

oraz

$this->link->exec('SET NAMES \'utf8mb4\'');

nie pomogło....

 

Z tego co zauważyłem to baza danych została przekonwertowana w wielu miejscach z utf8_generar_ci do utf8mb4 

 

Wszystkie imiona i nazwiska klientów, nazwy towarów, są bez polskich znaków po aktualizacji... jakieś pomysły na naprawę?

////Edit:2707

Dzisiaj jeszcze zrobiłem trochę kombinowania. Przywróciłem w 1-click kopię sprzed update. Niestety na bazie danych się coś wykrzaczyło ale pliki przywróciło. Wgrałem kopie bazy danych po udate i pomijając, że części elementów nie było na zapleczy wyświetlonych to polska czcionka była. Zrobiłem update jeszcze raz i na koniec wyświetliło że bazę danych mam już w tej wersji no i po update jestem ponownie w tym samym miejscu że nie mam polskich znaków. Czyli przynajmniej wiem, że nie z bazą danych jest problem.

Edited by Trelek (see edit history)
Link to comment
Share on other sites

  • 0

  

Te wszystkie problemy są niestety związane z kodowaniem serwera. U mnie jest to samo na serwerze jest latin2 default. A wszystko zapisywane jest UTF-8 do bazy. Po aktualizacji prestashop do najnowszej pojawiły się krzaki czyli 1.7.6.x do 1.7.7.x czy 1.7.8.x powoduje krzaki. Pobrałem bazę danych z default cahrset latin2 i to zamieniło wszystkie krzaki z na ogonki. Przy otworzeniu bazy w notepad++ ogonki są po wgraniu ich do bazy są. Ale w back office w zamówieniach czy też w kategoriach są krzaki. Podejrzewam że w niektórych plikach prestashop nie ma wymuszenia kodowania UTF-8 i brany jest latin2. Więc z bazy idzie UTF-8 a serwer czyta Latin2 więc wyskakują krzaki.

Ogólnie przez zgranie bazy z default charset latin2 i wgranie jej w utf pomogło naprawić 97% błędów związanych z krzakami. Pozostało tylko Kategorie i Zamówienia w back office. Najśmieszniejsze jest to jak wejdę edycję opisu kategorii jest ok ale przy wyświetlaniu są krzaki.

 

Kiedyś znalazłem coś takiego ostatni post: (zmiana działała ale już nie działa)

https://github.com/PrestaShop/PrestaShop/issues/12113


 

Quote

 

Odpowiedź prestashop z github na moje zapytanie

It is not directly related to PrestaShop. Your SQL server has incorrect default encoding, possibly latin2 or something like this. You can work around this problem by forcing encoding in Doctrine, this is how you can do that. The config file is inside app/config/doctrine.yml.

The final solution should be to change the default encoding of your database.

 

 

Na hostingu cyberfolks jest kodowanie serwera latin2. Wgrywając kopię sklepu 1/1 z bazą na inny serwis gdzie jest default utf8 rozwiązało wszystkie problemy.

Link to comment
Share on other sites

  • 0

Ok jedyne jakie rozwiązanie znalazłem to zmiana plików core prestashop i wgranie bazy w UTF8 bez krzaków. Niestety hosting provider cyberfolks się wypiął i powiedział że nie zmieni kodowania ani nie włączy nadpisaniu za pomocą .htaccess.

 

Najważniejsze to wgrać bazę w utf8 aby nie było żadnych śmieci. Wszystko musi mieć ęąśćół itd. Jeśli masz latin2 i widzisz krzaki w bazie to musisz zrobić mysql dump

mysqldump --user twojanazwauserabazydanych -p twojanazwabazydanych --default-character-set=latin2 > nazwaplikuzapisu.sql

Po zgraniu bazy usuwamy istniejącą i wgrywamy ponownie zmieniając w pliku .sql

/*!40101 SET NAMES latin2 */;

na

/*!40101 SET NAMES utf8 */;

Lub wgrać plik za pomocą phpMyAdmin z ustawieniem kodowania UTF8

 

 

Zmiany plików

dodanie linijki

$params['driverOptions'] = array(1002=>'SET NAMES utf8');

do pliku => /vendor/doctrine/dbal/lib/Doctrine/DBAL/DriverManager.php

Zmiana z:

        // URL support for MasterSlaveConnection
        if (isset($params['master'])) {
            $params['master'] = self::parseDatabaseUrl($params['master']);
        }

        if (isset($params['slaves'])) {
            foreach ($params['slaves'] as $key => $slaveParams) {
                $params['slaves'][$key] = self::parseDatabaseUrl($slaveParams);
            }
        }

Na:

        // URL support for MasterSlaveConnection
        if (isset($params['master'])) {
            $params['master'] = self::parseDatabaseUrl($params['master']);
        }
		
		$params['driverOptions'] = array(1002=>'SET NAMES utf8');

        if (isset($params['slaves'])) {
            foreach ($params['slaves'] as $key => $slaveParams) {
                $params['slaves'][$key] = self::parseDatabaseUrl($slaveParams);
            }
        }

 

Zmiana w pliku:

/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/DrizzlePDOMySql/Driver.php

Zmiana z:

    public function connect(array $params, $username = null, $password = null, array $driverOptions = [])
    {
        return new Connection(
            $this->constructPdoDsn($params),
            $username,
            $password,
            $driverOptions
        );
    }

Na:

    public function connect(array $params, $username = null, $password = null, array $driverOptions = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"))
    {
        return new Connection(
            $this->constructPdoDsn($params),
            $username,
            $password,
            $driverOptions
        );
    }

 

 

Zmiana w pliku:

/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOMySql/Driver.php

Zmiana z:

    public function connect(array $params, $username = null, $password = null, array $driverOptions = [])
    {
        try {
            $conn = new PDOConnection(
                $this->constructPdoDsn($params),
                $username,
                $password,
                $driverOptions
            );
        } catch (PDOException $e) {
            throw DBALException::driverException($this, $e);
        }

        return $conn;
    }

Na:

    public function connect(array $params, $username = null, $password = null, array $driverOptions = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"))
    {
        try {
            $conn = new PDOConnection(
                $this->constructPdoDsn($params),
                $username,
                $password,
                $driverOptions
            );
        } catch (PDOException $e) {
            throw DBALException::driverException($this, $e);
        }

        return $conn;
    }

 

 

 

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...