Dostosowanie php do uft8mb4

0

Dzień dobry.

Męczę się z tym od wczoraj. Jakie ustawienia zmienić, czy to w php.ini, czy w skrypcie php, czy w bazie MySQL, żeby poprawnie były wczytywane nazwy zakodowane w utf8mb4?

Wcześniejsza baza była w zwykłym utf8. PHP wczytywało ją dobrze, jednak w phpMyAdmin widać było krzaczkii w miejscu polskich znaków. Przekonwertowałem bazę do mb4 jednak teraz, php wczytuje polskie znaki jako "?". Jak to naprawić?

Próbowałem:
$mysqli->set_charset("utf8mb4"); / wtedy wyświetla polskie znaki jako np. \u0119, zamiast ę
Próbowałem jeszcze różne funkcje php, ale bez skutku.
W pliku php.ini nie znalazłem wzmianki o mb4. Używam wersji 7.4 na Linux Mint 19.3

Prószę o pomoc.
Dzięki
M.

PS.
Dodam, że w konsoli, jak i w phpMyAdmin, polskie znaki wyświetlają się prawidłowo.

OK. Krok do przodu. Użyłem flagi ,JSON_UNESCAPED_UNICODE w JSONie i teraz wypisuje prawidłowo polskie znaki.
echo json_encode($dane, JSON_UNESCAPED_UNICODE);

0

U mnie działa normalnie (mysql 8.0.27, php 8.1.3).
Możesz spróbować sprawdzić:

  • jakie jest kodowanie na połączeniu z bazą danych i w przeglądarce internetowej
  • co masz rzeczywiście w bazie danych, bo mogą tam być uszkodzone dane

Do tego przydadzą się funkcje cha­ra­c­ter_set_na­me() oraz var_dump().
Możesz na przykład użyć programu “curl” do pobrania strony do pliku tekstowego i sprawdzenia danych w edytorze binarnym. Ale przypuszczam, że jeśli phpMyAdmin nie wyświetla tych znaków, to mogą one być w bazie danych uszkodzone.

PS.
utf8mb4 w mysql to zwykły utf8 w php, a utf8 w mysql to utf8mb3 (maks. 3-bajtowy).

1 użytkowników online, w tym zalogowanych: 0, gości: 1