strtolower() / strtoupper() / mb_strtolower()
| 対応: | PHP 4(2000) |
|---|
文字列の大文字と小文字を変換します。日本語を含む場合は『mb_strtolower()』『mb_strtoupper()』を使用してください。
構文
// すべて小文字に変換する strtolower($string); // すべて大文字に変換する strtoupper($string); // 先頭の1文字だけを大文字にする ucfirst($string); // 各単語の先頭を大文字にする ucwords($string, $separators); // マルチバイト対応で小文字に変換する mb_strtolower($string, $encoding); // マルチバイト対応で大文字に変換する mb_strtoupper($string, $encoding);
関数一覧
| 関数 | 概要 |
|---|---|
| strtolower($string) | 文字列内のアルファベットをすべて小文字に変換します。 |
| strtoupper($string) | 文字列内のアルファベットをすべて大文字に変換します。 |
| ucfirst($string) | 文字列の先頭の1文字だけを大文字に変換します。 |
| ucwords($string, $separators) | 各単語の先頭を大文字に変換します。区切り文字は第2引数で指定でき、省略時はスペース・タブ・改行などが区切りになります。 |
| mb_strtolower($string, $encoding) | マルチバイト文字に対応した小文字変換です。 |
| mb_strtoupper($string, $encoding) | マルチバイト文字に対応した大文字変換です。 |
戻り値
変換後の文字列を返します。元の文字列は変更されません。
基本的な大文字・小文字変換
『strtolower()』『strtoupper()』はASCII範囲のアルファベットを一括変換します。『ucfirst()』は文の先頭だけ、『ucwords()』は各単語の先頭を大文字にします。
sample_strtolower.php
<?php
// すべて小文字に変換する
echo strtolower("Hello WORLD") . "\n"; // "hello world"
// すべて大文字に変換する
echo strtoupper("Hello World") . "\n"; // "HELLO WORLD"
// 先頭の1文字だけを大文字にする
echo ucfirst("hello world") . "\n"; // "Hello world"
// 各単語の先頭を大文字にする(タイトルケース)
echo ucwords("son goku vegeta piccolo") . "\n"; // "Son Goku Vegeta Piccolo"
// 区切り文字を指定してタイトルケースにする
echo ucwords("son-goku", "-") . "\n"; // "Son-Goku"
php sample_strtolower.php hello world HELLO WORLD Hello world Son Goku Vegeta Piccolo Son-Goku
実践パターン(スラッグ生成・大文字小文字を無視した比較)
メールアドレスやURLスラッグの正規化、大文字・小文字を区別しない文字列比較に活用できます。
sample_strtolower_practice.php
<?php
// メールアドレスの正規化
$email = "SonGoku@CAPSULE-CORP.jp";
echo strtolower($email) . "\n"; // "songoku@capsule-corp.jp"
// URLスラッグの生成
$title = "Son Goku Vegeta Piccolo Krillin";
$slug = strtolower(str_replace(" ", "-", $title));
echo $slug . "\n"; // "son-goku-vegeta-piccolo-krillin"
// 大文字・小文字を無視した比較
$input = "VEGETA";
if (strtolower($input) === "vegeta") {
echo "ベジータが見つかりました\n"; // 大文字・小文字を区別せず比較できる
}
// 配列のキャラ名を正規化してタイトルケースに統一する
$fighters = ["son goku", "VEGETA", "piccolo", "KRILLIN", "trunks"];
$normalized = array_map("ucfirst", array_map("strtolower", $fighters));
print_r($normalized);
php sample_strtolower_practice.php
songoku@capsule-corp.jp
son-goku-vegeta-piccolo-krillin
ベジータが見つかりました
Array
(
[0] => Son goku
[1] => Vegeta
[2] => Piccolo
[3] => Krillin
[4] => Trunks
)
mb_strtolower / mb_strtoupper の使い方
ドイツ語のエスツェット(ß)などASCII範囲外の文字を変換するには、マルチバイト対応の『mb_strtolower()』『mb_strtoupper()』を使います。第2引数に文字エンコーディングを指定します。省略した場合は『mb_internal_encoding()』の設定値が使われます。
sample_mb_strtolower.php
<?php
// ドイツ語エスツェットの大文字変換(mb_strtoupper)
echo mb_strtoupper("straße", "UTF-8") . "\n"; // "STRASSE"
// ドイツ語エスツェットの小文字変換(mb_strtolower)
echo mb_strtolower("STRAßE", "UTF-8") . "\n"; // "straße"
// 日本語を含む文字列の大文字変換
echo mb_strtoupper("son goku 孫悟空", "UTF-8") . "\n"; // "SON GOKU 孫悟空"
php sample_mb_strtolower.php STRASSE straße SON GOKU 孫悟空
概要
『strtolower()』と『strtoupper()』は文字列のアルファベットの大文字・小文字を一括変換する関数です。メールアドレスやURLの正規化、大文字・小文字を区別しない比較を行う場合に活用されます。
『ucfirst()』は文章の先頭だけを大文字にしたい場合、『ucwords()』はタイトルケースに変換したい場合に便利です。『ucwords()』は第2引数で区切り文字を指定でき、ハイフンやアンダースコアなどで区切られた文字列にも対応します。
ドイツ語のエスツェットなどマルチバイト文字の大文字・小文字変換が必要な場合は『mb_strtolower()』『mb_strtoupper()』を使用してください。文字列の検索には『strpos()』、大文字・小文字を区別しない置換には『str_ireplace()』が便利です。
よくあるミス
よくあるミス1: マルチバイト文字に strtolower() を使っても変換されない
『strtolower()』はASCII範囲(a〜z)のアルファベットしか変換しません。ドイツ語のエスツェット(ß)やアクセント付き文字などはそのままになるか、文字化けします。
<?php
// NG: strtolower() はASCII範囲外の文字を変換しない
echo strtolower("STRAßE"); // "straße" にならず "straÃe" 等になる(文字化けする可能性がある)
<?php
// OK: mb_strtolower() を使う
echo mb_strtolower("STRAßE", "UTF-8"); // "straße"
よくあるミス2: ucwords() でハイフン区切りが変換されない
『ucwords()』のデフォルトの区切り文字はスペース・タブ・改行のみです。ハイフン(-)やアンダースコア(_)で区切られた文字列は、第2引数に区切り文字を指定しないと正しく変換されません。
<?php
// NG: デフォルトはスペースのみが区切りになる
echo ucwords("son-goku"); // "Son-goku"(ハイフン後のgは大文字にならない)
echo ucwords("goku vegeta"); // "Goku Vegeta"(スペース区切りはOK)
<?php
// OK: 区切り文字を指定する
echo ucwords("son-goku", "-"); // "Son-Goku"
echo ucwords("son_goku", "_"); // "Son_Goku"
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。