文字列の最初の文字を大文字にしようとしています。英字では問題なく動作しますが、残念ながら、たとえば英語以外の文字では機能しません。
echo ucfirst("çağla");
英語以外の文字を含むすべての単語で ucfirst を適切に機能させる正しい方法は何ですか?
1 つの単語の場合、正しい方法は次のとおりmb_convert_case
ですMB_CASE_TITLE
。
mb_internal_encoding('UTF-8');
echo mb_convert_case('çağla', MB_CASE_TITLE);
文字セットとロケールに依存するため、一部の言語では大文字とタイトルケースが区別されます。ここでは、タイトルケースの方が適切です。
例: digram 文字 dz。大文字では DZ になりますが、タイトルケースでは Dz になります。これは同じことではありません。
注: mb_convert_case
+MB_CASE_TITLE
だけは ucwords と同等です。ucfirst の厳密な等価物は次のようになります。
return mb_convert_case(mb_substr($str, 0, 1), MB_CASE_TITLE) . mb_substr($str, 1);
ありがとう、私はついにストーニーの提案としてこの機能を見つけました。
function myucfirst($str) {
$fc = mb_strtoupper(mb_substr($str, 0, 1));
return $fc.mb_substr($str, 1);
}
新しい PHP バージョンでは、PHP は内部的に UTF-8 で動作します。したがって、UTF-8 ではない文字列がある場合、たとえばhtmlspecialcharsなどの一部の関数で問題が発生します。
おそらく、ここに同じ問題があります。最初にutf8_encodeを使用して文字列を utf-8 に変換してみてください。
デフォルトの言語はCだと思います。
「アルファベット」は現在のロケールによって決定されることに注意してください。たとえば、デフォルトの「C」ロケールでは、ウムラウト (ä) などの文字は変換されません。
http://php.net/manual/de/function.ucfirst.php
下にスクロールすると、それを変換する関数が表示されます。
してみてください $string = mb_strtoupper($string[0]) . mb_substr($string, 1);