Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

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.

reklama

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 "<br />";
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 "<br />";
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:

Ęóąśłżźćń Ęóąśłżźćń

 

porady programowanie
reklama
r   e   k   l   a   m   a

Komentarze