mb_convert_case
メソッドだけ知っていれば最強、そう思っていた時期がぼくにもありました。
大文字を小文字に変換
<?php echo strtolower('HELLO mĄkA!'); // hello mĄka! echo mb_strtolower('HELLO mĄkA!', 'UTF-8'); // hello mąka! echo mb_convert_case('HELLO mĄkA!', MB_CASE_LOWER, "UTF-8"); // hello mąka!
strtolower
はUnicodeに対応してないが故に他のメソッドと挙動が異なる
小文字を大文字に変換
<?php echo strtoupper('hello mąka!'); // HELLO MąKA! echo mb_strtoupper('hello mąka!', 'UTF-8'); // HELLO MĄKA! echo mb_convert_case('hello mąka!', MB_CASE_UPPER, "UTF-8"); // HELLO MĄKA!
これも同じく
単語の最初の文字だけ大文字に変換
これが結構厄介
<?php $str = "HELLO-TĄRO@gmail.com"; echo ucfirst($str); // HELLO-TĄRO@gmail.com echo ucwords($str); // HELLO-TĄRO@gmail.com echo mb_convert_case($str, MB_CASE_TITLE, "UTF-8"); // Hello-Tąro@gmail.com
ucfirst()
とucwords()
の違いがイマイチ分からないが、公式ドキュメントいわく、
- ucfirst : 文字列の最初の文字を大文字にする
- ucwords : 文字列の各単語の最初の文字を大文字にする
とのこと。実際「hello, world」を試すとucfirst()
がHello, world
を返す一方でucwords()
はHello, World
と返す。というのもucwords()
はスペース、フォームフィード、改行、キャリッジリターン、 水平タブ、垂直タブの直後にある文字を単語として人気するからである。(公式ドキュメント見ればわかるが単語の区切りをオプションで指定可能)
異彩を放っているのがmb_convert_case()
。Unicodeに対応しているだけではなく、ハイフンの後も大文字に変換している。これは使いようによって異なるが気遣いがいいのはmb_convert_case()
だと思う