Recent a trebuit să dezvolt un script care să identifice prima literă dintr-o propoziție și să o transforme în majusculă (format sentence case). Problema a apărut atunci când am constatat că mai multe descrieri dintr-o bază de date conțineau cuvinte scrise complet cu majuscule chiar în mijlocul propozițiilor, afectând aspectul general al textului.
Pentru a rezolva această problemă în PHP, ținând cont și de caracterele multibyte (cum ar fi diacriticele românești în UTF-8), soluția completă este prezentată mai jos:
function my_ucfirst(, = 'utf-8') {
if (function_exists('mb_strtoupper') && function_exists('mb_substr') && !empty()) {
= mb_strtolower(, );
= mb_strtoupper(, );
preg_match('#(.)#us', , );
= . mb_substr(, 1, mb_strlen(, ), );
} else {
= ucfirst();
}
return ;
}
function sentence_case() {
= preg_split('/([.?!]+)/', , -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
= '';
foreach ( as => ) {
.= ( & 1) == 0 ?
my_ucfirst(strtolower(trim())) :
. ' ';
}
return trim();
}
= "acesta este scris ceva. inca o propozitie";
echo sentence_case(); // afișează corect textul
Funcția sentence_case separă șirul de caractere pe baza semnelor de punctuație (punct, semnul întrebării, semnul exclamării), trece fiecare propoziție prin funcția personalizată my_ucfirst și reconstruiește textul cu prima literă a fiecărei propoziții transformată în majusculă.