Potrzebujesz:
- biblioteki multibyte (domyślnie w php jest dostępna, na localhoście być może będziesz musiał ją odblokować w php.ini), która rozróżnia polskie znaki
- kawałka kodu
Masz gotowca z komentarzami:
$text = "łodzkie województwo WsPieRa WOŚP na XXII finale KTÓry odbyŁ się 23 lutego";
echo ucwords2($text);
function ucwords2($text, $encoding='utf-8') {
$words = mb_split(' ', $text); // rozbija tekst po spacji
foreach ($words as $key=>$word) { // po kolei po tablicy ze słowami
if (!mb_isallupper($word, $encoding)) { // jeżeli NIE jest tak, że wszystkie litery są duże
// to znaczy, że to nie jest cyfra rzymska/skrót
// i uruchamiamy funkcję, która przekszałci string i podstawiamy wynik do tablicy słów
$words[$key] = mb_ucfirst(mb_strtolower($word, $encoding), $encoding);
}
}
return implode(' ', $words); // zwracając - łączymy tablicę słów spacją
}
function mb_isallupper($string, $encoding) { // sprawdza czy wszystkie litery są duże
// jeżeli tekst jest taki sam jak jego przekształcenie na duże litery to znaczy, że wszystkie są duże
return $string === mb_strtoupper($string, $encoding);
}
// w bibliotece multibyte nie ma ucfirst, więc trzeba sobie zrobić
// z lenistwa skopiowałem funkcję stąd:
// http://stackoverflow.com/questions/2517947/ucfirst-function-for-multibyte-character-encodings
function mb_ucfirst($string, $encoding) {
$strlen = mb_strlen($string, $encoding);
$firstChar = mb_substr($string, 0, 1, $encoding);
$then = mb_substr($string, 1, $strlen - 1, $encoding);
return mb_strtoupper($firstChar, $encoding) . $then;
}