mb_convert_case
funkcja
Zmienia wielkość liter w ciągu znaków z pełną obsługą Unicode, w tym polskich znaków (ą→Ą, ę→Ę itd.). Obsługuje tryby UPPER, LOWER i TITLE.
mb_convert_case(string $string, int $mode, ?string $encoding = null): string
mb_convert_case to wielobajtowy odpowiednik strtoupper/strtolower, który poprawnie obsługuje znaki spoza ASCII — w tym polskie ą, ę, ó, ś, ź, ż. Dostępne tryby:
| Stała | Opis |
|---|---|
| MB_CASE_UPPER | Zamienia wszystkie litery na duże |
| MB_CASE_LOWER | Zamienia wszystkie litery na małe |
| MB_CASE_TITLE | Pierwsza litera każdego słowa duża |
Zwykłe ucwords nie radzi sobie z polskimi znakami na początku słowa — łódź zamieni w łódź zamiast w Łódź. mb_convert_case z MB_CASE_TITLE robi to poprawnie.
<?php
declare(strict_types=1);
$tytul = 'łódź nad wartą';
echo ucwords($tytul); // wynik: łódź Nad Wartą ← błąd!
echo mb_convert_case($tytul, MB_CASE_TITLE, 'UTF-8'); // wynik: Łódź Nad Wartą ✓
echo mb_convert_case($tytul, MB_CASE_UPPER, 'UTF-8'); // wynik: ŁÓDŹ NAD WARTĄ
echo mb_convert_case('ŁÓDŹ KRAKÓW', MB_CASE_LOWER, 'UTF-8'); // wynik: łódź kraków
Jeśli nie podasz $encoding, PHP użyje wewnętrznego kodowania ustawionego przez mb_internal_encoding(). Najczęściej jawnie podawaj 'UTF-8', żeby uniknąć niespodzianek.