Blog (16)
Komentarze (143)
Recenzje (0)
@slepciuZmiana wielkości liter w PHP, a polskie znaki

Zmiana wielkości liter w PHP, a polskie znaki

Chyba wszyscy programiści PHP znają magiczne  funkcje operujące na stringach:

  • strtoupper($str)
  • strtolower($str)

Służą one do zmiany wielkości liter w ciągu, pierwsza na duże litery, druga na małe.

Niestety funkcje te nie najlepiej radzą sobie w przypadku kodowania UTF‑8 z polskimi znakami (i nie tylko polskimi).

Próba wykonania takiego kodu:

$a="ęóąśłżźćń";
$b="ĘÓĄŚŁŻŹĆŃ";
echo strtoupper($a);
echo "
";
echo strtolower($b);

Daje dosyć niespodziewane rezultaty w postaci:

ęaąśłżUćń
?????????

Z pomocą przychodzą nam funkcje, które również są obecne w php, a które nie maja problemów z różnymi kodowaniami:

string mb_strtolower($str,[$encoding])
string mb_strtoupper($str,[$encoding])

Jak łatwo się domyslić jako pierwszy argument podajemy test do zmiany, a jako drugi kodowanie.

echo mb_strtoupper($a,"UTF-8");
echo "
";
echo mb_strtolower($b,"UTF-8");

Teraz dostajemy poprawny wynik:

ĘÓĄŚŁŻŹĆŃ
ęóąśłżźćń

Jest jeszcze jedna funkcja którą warto znać w tym temacie. Może zrobić to samo co dwie poprzednie i dodatkowo zmienić na wielkie pierwsze litery wyrazów. Jej konstrukcja jest następująca:

string mb_convert_case ($str,$mode,[$encoding])

Pierwszy argument to znowu tekst do zmiany, drugi to tryb, a trzeci kodowanie. Wyjaśnienia wymaga tryb. W tym argumencie podajemy jedną z trzech stałych:

  • MB_CASE_UPPER - zmiana wszystkich liter na wielkie
  • MB_CASE_LOWER - zmiana wszystkich liter na małe
  • MB_CASE_TITLE - zmiana pierwszych liter w wyrazach na wielkie

Przykład użycia:

echo mb_convert_case("ęóąśłżźćń ĘÓĄŚŁŻŹĆŃ",MB_CASE_TITLE,"UTF-8");

Efekt:

Ęóąśłżźćń Ęóąśłżźćń
Wybrane dla Ciebie
Komentarze (17)