・現状のPHPでは、文字列は「シングルバイト文字」として実装されており、日本語のような「マルチバイト文字」の処理(=文字単位)には適していません。
日本語処理は、漢字など多くの文字を表現する必要があるため、マルチバイト文字を使用して文字単位で扱えるようにする必要があります。しかも、プラットフォームや使用目的によって、複数の文字エンコーディングが存在します。(通常の利用では2バイトで日本語表現が可能ですが、EUC-JPの場合は2~3バイト、UTF-8の場合は最大6バイトが必要となることがあります)
・Webアプリケーションで日本語を正しく処理するためには、適切な文字エンコーディングを使用しなければなりません。
1.ブラウザから送信されるデータ(HTTP入力文字エンコーディング)
2.PHP内部文字エンコーディング
3.PHPスクリプト文字エンコーディング
4.DBクライアント文字エンコーディング
5.ブラウザに送信するデータ(HTTP出力文字エンコーディング)
6.メール送信するデータ文字エンコーディング
など。
・PHP本体にはマルチバイト文字を正しく処理する機能はありませんが、mbstring拡張モジュールが、マルチバイト文字列処理を実行するための文字列関数を提供します。
・PHP5では日本語の場合、内部文字エンコーディングは、EUC-JP、UTF-8等が利用できます。PHPスクリプト文字エンコーディングは、Shift-JISを避け、EUC-JPかUTF-8を使用するのが安全です。
・PHP6では内部文字エンコーディングがUTF-16になると発表されていますので、今後、スクリプトを記述する際には、Unicode(UTF-16、UTF-8)を使うのが良いかもしれません。