Kto hostuje Stronę?

narzędzie do sprawdzania hostingu stron
2012-06-18 10:36:22

Jeśli w wyświetlanych z bazy danych MySQL wynikach zamiast polskich liter otrzymujesz dziwne szlaczki, to przyczyną takiej sytuacji jest problem z kodowaniem znaków między MySQL a PHP.

Aby unikać takich sytuacji w przyszłości, należy stosować pewną zasadę, która powinna stać się nawykiem.

Podczas zakładania tabel w bazie danych powinniśmy wiedzieć, jakie dane ta tabela będzie przechowywać i jaka metoda porównywania napisów będzie dla nas optymalna.

A zatem, jeśli na stronie będziemy używać jedynie języka polskiego i jedynie polskich znaków diakrytycznych, to najlepszym rozwiązaniem jest wybranie kodowania utf8_polish_ci. Jeśli natomiast oprócz polskiego ó i ł będziemy również używać niemieckich umlautów ö czy ü to zalecałbym ustawianie porównywania napisów na utf8_general_ci.

Doradzałbym również nie mieszać różnych kodowań w tabelach, z których korzystać będzie jedna strona. Najlepiej jest wybierać utf8_general_ci. utf8_polish_ci zalecam używać wówczas, gdy będziemy na swojej stronie przedstawiać wyniki z bazy, posortowane według alfabetu, gdyż w tym kodowaniu MySQL na pewno zwróci nam poprawnie posortowane wyrazy z polskimi znakami.

Dwie tabele w bazie danych, jedna w utf8_general_ci a druga w utf8_polish_ci, nie będą także poprawnie współpracować przy łączeniu w jedną przy użyciu JOIN (LEFT JOIN, RIGHT JOIN itd), gdy wspólnym elementem łączącym będzie np. wyraz z polskimi literami, gdyż tak zapisany wyraz w utf8_polish_ci nie będzie tożsamy z tym samym wyrazem w kodowaniu utf8_general_ci.

Gdy zatem mamy już stworzone w odpowiednim kodowaniu tabele i wypełniliśmy je danymi, możemy zabrać się za próbę poprawnego wyświetlenia ich na naszej stronie. W tym celu w nagłówku strony, w sekcji <head></head> dodajemy linijkę:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

W zależności od ustawień konfiguracyjnych mysqla na naszym serwerze (dokładnie chodzi o opcję default-character-set) wyświetlane z bazy dane będą zawierać polskie znaki lub szlaczki. Czyli, jeśli tabele mamy ustawione na utf-8, a główne ustawienie na serwerze w opcji default-character-set na np. latin, to wyniki nie będą poprawne. Opcja ta powinna wówczas mieć wartość default-character-set=utf8, lecz rzadko zdarza się, aby na hostingu współdzielonym można było te główne wartości samemu edytować. Być może napisanie do centrum pomocy naszego hostingu i poproszenie o zmianę tej wartości by pomogło. Szkoda jednak zachodu, gdyż w skrypcie PHP można zastosować sztuczkę, która na zawsze rozwiąże nasze problemy z wyświetlaniem polskich liter.

Po nawiązaniu połączenia z bazą danych, najlepiej używając funkcji mysqli_connect, i wybraniu bazy danych, należy wysłać do mysqla jedno magiczne zapytanie:

Magiczny trick
1<?php
2 $mysqli=mysqli_connect($dbhost, $dbuser, $dbpassword);
3 mysqli_select_db($mysqli, $database);
4 mysqli_query($mysqli, "SET NAMES utf8 COLLATE utf8_general_ci"); // to jest ta magiczna linijka
5?>


Co ta linijka zatem takiego robi? W zasadzie to nic specjalnego. Ustawia wyświetlanie danych z bazy na UTF8 i porównywanie napisów na utf8_general.
O teraz nie powinno być żadnych problemów z poprawnym wyświetlaniem polskich liter na naszej stronie.

O blogu

Blog ten ma charakter luźnych refleksji poświęconych zagadnieniom związanym z hostingiem stron i domen, a także webmasteringiem i programowaniem (PHP, MySQL, JavaScript).

Dodaj komentarz

Imię:


Strona www:


Adres e-mail:


Komentarz:


Przepisz kod z obrazka:
pytanie antyspamowe

Tagi