PHPで文字化けに注意して文字列内のアルファベットを小文字または大文字に変換する方法

文字列を小文字に変換するPHP関数として、strtolower()関数、mb_strtolower()関数があるので、これらを使ってみる。

例1 変数←「英語アルファベット大文字」
$str = "NOBUNEKO";
echo strtolower($str);

《出力結果》
NOBUNEKO

例2 変数←「英語アルファベット大文字+日本語文字列」
$str = "NOBUNEKOは猫大好きです";
echo strtolower($str);

《出力結果》
nobunekoは罵大硬きです
※「猫大好き」が「罵大硬き」と文字化けしてしまった。日本語などマルチバイト文字列が含まれる場合は、strtolower()関数は使用しない方がよさそう。

日本語などマルチバイト文字列を含む文字列を小文字に変換する場合は、mb_strtolower()関数を使用すると良さそうなので試してみる。

例3 変数←「英語アルファベット大文字+日本語文字列」 ※文字化けする場合がある
$str = "NOBUNEKOは猫大好きです";
echo mb_strtolower($str);

《出力結果》
nobunekoわ罵大硬きょす
※「は猫大好きです」が「わ罵大硬きょす」と文字化けしてしまった。strtolower()関数よりも悪い結果となってしまった。

PHPの現在の内部文字エンコーディングに問題があると思ったので、mb_internal_encoding()関数で確認してみる。

echo mb_internal_encoding();

《出力結果》
ISO-8859-1

ISO-8859-1をWikipediaで調べてみると、「ラテンアルファベットの文字コード標準」ということだった。

《参考》
http://ja.wikipedia.org/wiki/ISO/IEC_8859-1
ISO 8859-1(より正式にはISO/IEC 8859-1)はISO/IEC 8859の第一部であり、ラテンアルファベットの文字コード標準である。

内部文字エンコーディングが、何だかいかにも文字化けしそうな文字コードで設定されている!(苦笑)。

例4 変数←「英語アルファベット大文字+日本語文字列」 ※文字化け対策(方法1)を含む
mb_internal_encoding("SJIS-win");
$str = "NOBUNEKOは猫大好きです";
echo mb_strtolower($str);

《出力結果》
nobunekoは猫大好きです

※mb_internal_encoding()関数で、PHPの内部文字エンコーディングをシフトJIS(Shift_JIS)に設定してみると、文字化けは解消された。
mb_internal_encoding()関数を使用したくない場合は、mb_strtolower()関数で文字コードを指定することでも文字化けは解消される。

例5 変数←「英語アルファベット大文字+日本語文字列」 ※文字化け対策(方法2)を含む
$str = "NOBUNEKOは猫大好きです";
echo mb_strtolower($str,"SJIS-win");

《出力結果》
nobunekoは猫大好きです

一方、文字列を大文字に変換するPHP関数として、strtoupper()関数、mb_strtoupper()関数があるので、これらを使ってみる。

例1 変数←「英語アルファベット小文字」
$str = "nobuneko";
echo strtoupper($str);

《出力結果》
NOBUNEKO

例2 変数←「英語アルファベット小文字+日本語文字列」
$str = "nobunekoは猫大好きです";
echo strtoupper($str);

《出力結果》
NOBUNEKOは猫大好きです
※strtolowerと異なり、文字化けしないのかと思ったら、文字列を変更すると文字化けした。

例3 変数←「英語アルファベット小文字+日本語文字列」 ※文字化けする場合がある
$str = "nobunekoは電車が好きです";
echo strtoupper($str);

《出力結果》
NOBUNEKOは泥車が好きです
※「電車」が「泥車」に文字化けした。

一方、日本語などマルチバイト文字列を含む文字列を大文字に変換する場合は、mb_strtoupper()関数を使用すると良さそうなので試してみる。

例4 変数←「英語アルファベット小文字+日本語文字列」 ※文字化けする場合がある
$str = "nobunekoは電車が好きです";
echo mb_strtoupper($str);

《出力結果》
NOBUNEKOは泥車が好きです
※「電車」が「泥車」に文字化けした。

例5 変数←「英語アルファベット小文字+日本語文字列」 ※文字化け対策(方法1)を含む
mb_internal_encoding("SJIS-win");
$str = "nobunekoは電車が好きです";
echo mb_strtoupper($str);

《出力結果》
NOBUNEKOは電車が好きです
※mb_strtolowerと同様にPHPの内部文字エンコーディングを指定すると、文字化けが解消した。

例6 変数←「英語アルファベット小文字+日本語文字列」 ※文字化け対策(方法2)を含む

$str = "nobunekoは電車が好きです";
echo mb_strtoupper($str,"SJIS-win");

《出力結果》
NOBUNEKOは電車が好きです
※mb_strtolower()と同様にmb_strtoupper()関数内で文字コードを指定すると、文字化けが解消した。

  
 

前へ

PHPで文字列に含まれる数字を数値に変換する方法

次へ

台風15号対策のために、愛媛県から神奈川県に前日移動した