PHPには文字列を扱う関数があります。
これらの関数は「1文字=1バイト」ということを前提にして機能しています。
例えば文字数を数える関数だったら、文字を数えているというよりもバイト数を数えているんです。これにより結果的に文字数が分かるようになっているわけです。
しかし日本語のように1文字で2バイト以上の文字コードも存在します。これらは「マルチバイト文字」と呼ばれます。マルチバイト文字は、1文字=1バイトではないので前回紹介した関数を使うと不具合が起きます。
ですからPHPで日本語(マルチバイト文字)を使うには、特別な処理をする必要が出てきます。
PHPのマルチバイト文字を扱う関数
基本的には文字列を扱う関数の前に「mb_」をつけることで日本語の文字列を扱うことが出来るようになります。
文字列をカウントするstrlen関数だったら、mb_strlenを使うことで日本語の文字列も正しくカウントすることが出来ます。
<?php $a1 = "あいうえお"; echo mb_strlen($a1); ?>
文字コード
PHPで日本語を扱う上で1つのポイントとなるのが文字コードです。
日本語1つをとってもいくつかの文字コードが存在します。webブラウザによっても使われている文字コードは様々です。
同じ日本語でも文字コードが違う場合コンピュータは全く別のデータとして認識します。これにより文字化けが起こることがあります。
それに対応するためにはPHP内で使用する言語、文字コードを正しく指定してあげる必要があります。
そこで使われるのが「mb_language()」と「mb_internal_encoding()」です。
言語を指定する mb_language()
使用する言語を指定します。
mb_language("Japanese");
日本語は「Japanese」を設定しましょう。「ja」でもOKです。
文字コードを指定する mb_internal_encoding()
使用する文字コードを指定します。
mb_internal_encoding("UTF-8");
文字コードは他にもいくつかありますが、「webサーバ」「webブラウザ」「データべース」「PHP」が互いにどの文字コードを使っているかを理解できないと文字化けが起きてしまうので、正しく指定することが重要です。
文字コードの判定と変換
文字化けを防いだり修正するときに便利な関数を紹介しておきます。
文字コードの判定 mb_detect_encoding()
mb_detect_encoding(判定したい文字列);
文字コードの変換 mb_convert_encoding()
mb_convert_encoding(変換したい文字列, 変換後の文字コード);
最後に
PHPで日本語文字列の処理をするには、文字コードを把握しておくのがポイントとなります。PHP 内部だけでなく、ブラウザ・サーバ・データべースも絡んでくることもしっかり把握しておきたいですね。