Да, безусловно: избегайте сущностей и относитесь к Unicode как есть - таким образом он также работает для символов / букв, которые вы забыли. Не говоря уже о других языках и системах букв.
Согласно https://www.php.net/manual/en/function.mb-strtoupper.php#124253 вы можете легко комбинировать mb_strlen()
, mb_substr()
и mb_strtoupper()
для создания своей собственной функции:
// First character in uppercase, others in lowercase
function mb_ucfirst( $sInput, $sEncoding= 'UTF-8' ) {
$iLen= mb_strlen ( $sInput, $sEncoding );
$sFirst= mb_substr ( $sInput, 0, 1, $sEncoding );
$sRest= mb_substr ( $sInput, 1, $iLen- 1, $sEncoding );
return mb_strtoupper( $sFirst, $sEncoding ). mb_strtolower( $sRest );
}
// Perform ucfirst() on every word
function mb_ucwords( $sInput, $sEncoding= 'UTF-8' ) {
$aWord= preg_split( '/ /u', $sInput );
$sOut= '';
foreach( $aWord as $iWord=> $sWord ) $aWord[$iWord]= mb_ucfirst( $sWord, $sEncoding );
return join( ' ', $aWord );
}
// Now test it
header( 'Content-type: text/plain' );
$aTest= array
( 'áNgELa MARÌA ñUESé Álvarez áLVAREZ' // i.e. Spanish
, 'änGY ösTRogEN' // i.e. German
, 'Мария шараПОВА' // Cyrillic
, 'βήτα θήΤΑ' // Greek
, 'CHLOË' // i.e. Afrikaans
, 'łaTYnKA' // i.e. Polish
,
);
$i= 0;
foreach( $aTest as $sTest ) printf( "%d. %s \t >>> \t %s\n", ++$i, $sTest, mb_ucwords( $sTest ) );
Конечно: сохраните весь PHP файл в UTF-8 и аналогичным образом обработайте свой ввод. Если вы используете другую кодировку, вы должны указать это в качестве второго параметра функции.