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 — 文字列に対してケースフォルディングを行う
説明
string mb_convert_case
( string $str
, int $mode
[, string $encoding
] )
mode で指定された方法で string に対してケースフォルディングを行います。
パラメータ
- str
-
変換される文字列。
- mode
-
変換モード。 MB_CASE_UPPER、 MB_CASE_LOWER あるいは MB_CASE_TITLE のいずれかです。
- encoding
-
encoding パラメータには文字エンコーディングを指定します。省略した場合は、 内部文字エンコーディングを使用します。
返り値
mode で指定された方法で string に対してケースフォルディングを行った結果を返します。
Unicode
標準のケースフォルディング関数である strtolower() や strtoupper() と違い、ケースフォルディングは Unicode 文字属性を基準に行われます。したがって、この関数の挙動は ロケールの設定に影響されず、また、すべてのアルファベット、 例えば A ウムラウト (Ä) を変換することができます。
Unicode 文字属性についての詳細は » http://www.unicode.org/unicode/reports/tr21/ を参照してください。
例
例1 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; // Prints MARY HAD A LITTLE LAMB AND SHE LOVED IT SO
$str = mb_convert_case($str, MB_CASE_TITLE, "UTF-8");
echo $str; // Prints Mary Had A Little Lamb And She Loved It So
?>
mb_convert_case
info at yasarnet dot com
04-Jul-2008 08:57
04-Jul-2008 08:57
thomas underscore corthals at hotmail dot com
16-Aug-2006 12:30
16-Aug-2006 12: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;
}
?>
alex at agileware dot net
07-Feb-2006 03:02
07-Feb-2006 03: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));
}
footballkid4 at hotmail dot com
04-Feb-2006 05:59
04-Feb-2006 05: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
Rasa Ravi at tantrajoga dot cz
30-Apr-2005 10:36
30-Apr-2005 10: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.
