4

文字列の最初の文字を大文字にしようとしています。英字では問題なく動作しますが、残念ながら、たとえば英語以外の文字では機能しません。

echo ucfirst("çağla");

英語以外の文字を含むすべての単語で ucfirst を適切に機能させる正しい方法は何ですか?

4

5 に答える 5

7

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);
于 2014-09-08T17:47:40.990 に答える
4

ありがとう、私はついにストーニーの提案としてこの機能を見つけました。

function myucfirst($str) {
    $fc = mb_strtoupper(mb_substr($str, 0, 1));
    return $fc.mb_substr($str, 1);
}
于 2014-09-08T17:42:35.757 に答える
2

新しい PHP バージョンでは、PHP は内部的に UTF-8 で動作します。したがって、UTF-8 ではない文字列がある場合、たとえばhtmlspecialcharsなどの一部の関数で問題が発生します。

おそらく、ここに同じ問題があります。最初にutf8_encodeを使用して文字列を utf-8 に変換してみてください。

デフォルトの言語はCだと思います。

「アルファベット」は現在のロケールによって決定されることに注意してください。たとえば、デフォルトの「C」ロケールでは、ウムラウト (ä) などの文字は変換されません。

http://php.net/manual/de/function.ucfirst.php

下にスクロールすると、それを変換する関数が表示されます。

于 2014-09-08T17:37:40.183 に答える
1

してみてください $string = mb_strtoupper($string[0]) . mb_substr($string, 1);

于 2014-09-08T17:40:13.170 に答える