For my case following did the work to capitalize UTF-8 encoded string.
function capitalize($str, $encoding = 'UTF-8') {
return mb_strtoupper(mb_substr($str, 0, 1, $encoding), $encoding) . mb_strtolower(mb_substr($str, 1, mb_strlen($str), $encoding), $encoding);
}
mb_convert_case
(PHP 4 >= 4.3.0, PHP 5)
mb_convert_case — Modifie la casse d'une chaîne
Description
Effectue la modification de la casse de la chaîne spécifiée, suivant le mode spécifié.
Liste de paramètres
- str
-
La chaîne à convertir.
- mode
-
Le mode de conversion. Peut être un parmi : MB_CASE_UPPER, MB_CASE_LOWER, ou MB_CASE_TITLE.
- encoding
-
Le paramètre encoding est l'encodage des caractères. S'il est omis, l'encodage de caractres interne sera utilisé.
Valeurs de retour
La chaîne dont la casse a été changée, suivant le mode fourni.
Unicode
Contrairement aux fonctions standards comme strtolower() et strtoupper(), la modification est réalisée en se basant sur le dictionnaire Unicode. Par conséquent, le comportement de cette fonction n'est pas modifié par des configurations locales, et il peut convertir n'importe quelle caractère qui a des propriétés alphabétiques, comme le A-umlaut (Ä).
Pour plus d'informations sur les propriétés de l'Unicode, visitez le site de » http://www.unicode.org/unicode/reports/tr21/.
Exemples
Exemple #1 Exemple avec mb_convert_case()
<?php
$str = "mary had a Little lamb and she loved it so";
$str = mb_convert_case($str, MB_CASE_UPPER, "UTF-8");
echo $str; // Affiche : MARY HAD A LITTLE LAMB AND SHE LOVED IT SO
$str = mb_convert_case($str, MB_CASE_TITLE, "UTF-8");
echo $str; // Affiche : Mary Had A Little Lamb And She Loved It So
?>
mb_convert_case
03-Jul-2008 11:57
15-Aug-2006 03:30
If you want to capitalize the first letter of a multibyte string, you can use this function.
<?php
function capitalize($str, $encoding = null) {
$str = mb_strtoupper($str{0}, $encoding) . mb_substr($str, 1, null, $encoding);
return $str;
}
?>
06-Feb-2006 06:02
This function is a bit more flexible than using mb_convert_case with MB_CASE_TITLE, because it lets you add words whose case you don't want modified.
function title_case($string, $exceptions = array('to', 'a', 'the', 'of', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X')) {
$words = split(" ", $string);
$newwords = array();
foreach ($words as $word)
{
if (!array_key_exists($word, $exceptions)) {
$word = strtolower($word);
$word = ucfirst($word);
}
array_push($newwords, $word);
}
return ucfirst(join(" ", $newwords));
}
04-Feb-2006 08:59
This function will capitalize the first letter ( the same as using mb_convert_case with MB_CASE_TITLE flag, but when using a sentence, it'll only capitalize the first word )
<?php
function capitalize(&$input) {
$input = strtoupper( substr( $input , 0 , 1 ) ).strtolower( substr( $input , 1 ) );
return $input;
}
?>
Very short, uses substr, strtoupper, and strtoupper only
30-Apr-2005 01:36
For CZECH characters:
<?php
$text = mb_convert_case($text, MB_CASE_LOWER, "Windows-1251");
?>
The right encoding Windows-1250 is not valid (see the list mb_list_encodings), but Windows-1251 will do the same 100%. The function strtolower() ignores czech characters with diacritics.
