標準的なStrtolowerおよびStrtoupper機能は、ASCII文字のみをサポートしています。 UTF-8エンコードなどの文字を処理すると、英語以外の文字を正しく変換することはできません。例えば:
$text = "Γει? Σου Κ?σμε"; // ギリシャ語
echo strtoupper($text); // 出力が正しくない場合があります
この時点で、 MB_CONVET_CASEが必要です。
$text = "Γει? Σου Κ?σμε";
echo mb_convert_case($text, MB_CASE_UPPER, "UTF-8"); // 大文字に正しく変換します
mb_convert_caseの関数プロトタイプは次のとおりです。
string mb_convert_case(string $string, int $mode, ?string $encoding = null)
$文字列:変換する文字列。
$モード:変換モード、主に:
MB_Case_upper :大文字に変換します
MB_Case_lower :小文字に変換します
mb_case_title :各単語の最初の文字の大文字化
$エンコード:文字エンコード(UTF-8、GBKなど)。指定されていない場合、 MB_INTERNAL_ENCODING()はデフォルトで使用されます。
多くの場合、開発者はエンコーディングパラメーターを無視して、誤った変換の結果をもたらします。常にコードを明確に書くことをお勧めします:
$text = "na?ve fa?ade résumé";
echo mb_convert_case($text, MB_CASE_UPPER, 'UTF-8');
出力: na?ve fa?aderesumé
MB_CONVERT_CASEは漢字の状態を変更しません(中国語には上限と小文字がないため)。ただし、UTF-8エンコードを設定する必要があります。そうしないと、文字列が切り捨てられる場合があります。
$text = "こんにちは World";
echo mb_convert_case($text, MB_CASE_UPPER, 'UTF-8'); // 出力:こんにちは WORLD
記事のタイトル、ニュースタイトルなどの処理に適しています。
$title = "le petit prince";
echo mb_convert_case($title, MB_CASE_TITLE, 'UTF-8'); // Le Petit Prince
テキストにHTMLタグまたはエンティティがある場合は、最初にそれらを削除するか、適切な処理を行ってください。そうしないと、出力が影響を受けます。
$name = trim($_POST['name']);
$cleaned = mb_convert_case($name, MB_CASE_TITLE, 'UTF-8');
特にドキュメント名、タイトルバーなど、インターフェイスを表示するときに、ユーザー入力が一貫した形式を持っていることを確認してください。
ユーザープロファイルに名前フィールドをフォーマットして表示し、多言語入力をサポートする必要があるとします。
function formatUserName($name) {
return mb_convert_case(trim($name), MB_CASE_TITLE, 'UTF-8');
}
echo formatUserName("éMILIE du chatelet"); // émilie Du Chatelet
また、APIインターフェイスでこの関数をカプセル化し、返されたJSONデータを統一された形式で標準化することもできます。例は次のとおりです。
header('Content-Type: application/json');
$data = [
'name' => mb_convert_case('sErGiO péRez', MB_CASE_TITLE, 'UTF-8'),
'profile_url' => 'https://gitbox.net/user/sergioperez'
];
echo json_encode($data);