Problem polega na tym, że treść pobierana na stronę PHP z bazy MYSQL zamiast polskich znaków wyświetla znaki zapytania.
W ‘PHP My Admin’ (używam WebServa) ustawiłem już w bazie i tabeli na ‘utf8_unicode_ci’, lecz nadal nic.
W nagłówku strony mam ‘iso-8859-2’, lecz gdy zmieniam na UTF-8 to polskie znaki znikają na całej zawartości strony. Gdy usuwam całą tą linię z nagłówka jest tak jakby był iso, tj. na stronie pl znaki są, lecz we fragmencie pobieranym z bazy są znaki zapytania.
Znaki zapytania na ekranie mogą być wyświetlane przez błędną stronę kodową dokumentu HTML. Upewnij się, że masz poprawne wpisy w nagłówku HTML takiej strony. Najlepiej podejrzyj go w przeglądarce (pokaż źródło strony), jeśli możesz to wklej tutaj ten nagłówek (dane “osobiste” możesz wyciąć).
Możesz też spróbować zapisać fragment zawierający (błędne) polskie znaki do pliku tekstowego i zobaczyć jakimś edytorem Hex, jak są one tam zakodowane. To da Ci informację, jakim kodowaniem w “środku” (w PHP) operujesz i podpowie, co dalej z tym możesz zrobić.
I jeszcze jedna uwaga - może w bazie danych jest inne kodowanie znaków, niż myślisz? Mam tu na myśli to, że na początku dane były zapisywane do tabeli w innym kodowaniu, niż potem (kiedy je zmieniłeś). Zmiana kodowanie zapewne nie przekonwertowała tych danych istniejących w bazie i stąd ten Twój problem? Sprawdź na jakichś nowych (wprowadzonych) danych, jak to się zachowuje.
tam gdzie (…) są fragmenty, które nie mają wpływu na problem, więc je usunąłem.
w nagłówku meta z tym iso-8859-2 jest tu w komentarzu, ale jak była normalnie to efekt był ten sam, a jak zamiast iso-8859-2 było utf-8 to krzaczki były na całej podstronie (i zawartość z bazy i normalna treść)
<?php
session_start();
?>
Słownik
(…)
<?php if (isset($_SESSION[‘login’])) { ?>
Słownik
<?php @ $mysql = mysql_connect( ‘localhost’, ‘root’, ‘’ ); if(!$mysql) { echo ‘Brak połączenia z bazą danych.’; exit; } $wybrana = mysql_select_db(‘slownik’); if(!$wybrana) { echo ‘Błąd wyboru bazy danych.’; exit; } $zapytanie = “select * from pojecia”; $wynik = mysql_query($zapytanie); if (!$wynik) { echo ‘Nie można wyświetlić zawartości bazy.’; exit; } if (mysql_num_rows($wynik) >0) { while($zmienna = mysql_fetch_assoc ($wynik)) { echo '’; echo $zmienna[‘slowo’]; echo ’ - '; echo $zmienna[‘definicja’]; echo ’ '; } } } else { ?> Niestety, nie jesteś uprawniony do przeglądania zawartości tej strony. <?php } ?>
(…)
Ok,zaraz spróbuję. Mam jeszcze jedno, może trochę głupie pytanko Jak przekonwertować ten plik .php do UTF-8. Bo chyba nie chodzi tylko o zmianę w nagłówku w polu meta na utf-8…?
Dokładnie, sama zmiana nagłówka nie wystarczy. Konwersję posiadają dobre edytory w menu (Notepad++ w opcji Encoding -> Convert to UTF-8 without BOM - używam ustawienia dla języka angielskiego bo jest mi tak wygodniej).
Są też osobne programy (np. Gżegżółka), które to też robią.
Ja używam Keda. Zmieniłem stronę kodową i ustawiłem w nagłówku meta na UTF-8. Efektem jest to, że np. zamiast Słownik wyświetla się S³ownik (chodzi o normalną treść). Treść z bazy nadal pozostaje ze znakami zapytania.
A jak ręcznie poprawisz w nim to słowo na Słownik i w edytorze już go widzisz poprawnie, to czy na stronie www jest ono dobrze wyświetlane, czy wciąż z błędem?
Inna sprawa to te dane z bazy MySQL - wstaw coś do niej nowego i wyświetl na stronie www - jak wygląda?
Widzę, że temat bardzo stary, ale nadal ciężko trafić w sieci na poprawne rozwiązanie i tak dopiero powyższa instrukcja rozwiązała mój problem. Piszę, bo chciałbym się teraz dowiedzieć czemu w/w polecenie rozwiązuje problem, a ręczne ustawienie kodowania jw. w phpmyadmin nie radzi sobie z polskimi znakami. Trik ten muszę stosować przy zapisie i oczywiście przy odczycie z bazy.