文字コードの問題

 最近よくメール送信における文字化けの質問が寄せられるので、ここで少し文字コードの問題について触れておきたいと思います。

 それぞれのOSには基本文字コードと言うのがあり、英語圏などでは別段問題にはならないんですが(アルファベット使用だから)、殊、日本語や韓国語、中国語などのいわゆるマルチバイト文字を使用している言語圏では、この文字コードの問題は避けては通れない大きな難問です。一般にWindows OSやMac OSはShift-JISの独自拡張を、UNIXやLinuxなどのPC-UNIXはEUC-JPやUTF-8を使用しています。つまり基本文字コードがお互いに異なった環境で、文字データをネット上でやり取りしている訳です。

 これら以外にも文字コードにはJISコード、ユニコードなどがあり、今の段階では文字コードの統一はまだ完成されていません。この文字コードの不統一が文字化けの根本原因なのですが、通常ホームページを見ている場合などには、もし文字化けが起きても「表示」⇒「エンコード」で適切な文字コードを選び直しさえすれば、ちゃんとした日本語表示に直る訳です。

メールの文字化けについて

 メールの送受信は、もちろんメールサーバが行なっている訳ですが、世界中のメールサーバのサーバOSは、その大部分をUNIX系OSが占めています。一部Windows系のメールサーバも稼動してはいますが、そのセキュリティの脆弱さ故、そのシェアを拡大できずにいると言うのが実情です。

 一般に我々が使っているクライアント・パソコンはそのほとんどがWindowsです。(一部Macを使っている方もいるでしょうが…)と言うことは、もう既にお気づきの事と思いますが、メールサーバOSの基本文字コードと、我々が実際にメールをやり取りしているクライアント・パソコンの文字コードとが異なっていると言う事です。

 パソコン初心者の方は、恐らくこの文字コードの問題については全く無知ではないでしょうか。僕もこの問題に直面したのは、Perl/CGIでメールフォーム・スクリプトを組もうとしている時でした。ある程度Perlのプログラミングが出来るようになってからのことです。

文字化け対策

 Perl/CGIなどでは、メール送信に関しては、送信内容を送信前にJISコードに変換しておくのが一般的です。何故JISコードかと言うと、メーラーのほとんどがJISコードに対応しているからと言うことらしいですね。

 ならばPHPに関してはどうでしょう。PHPはメール送信に関しても実に便利な関数があります。それがmb_send_mail()関数です。日本語を扱う場合、このmb_send_mail()関数を使えば、設定した言語に応じて、base64エンコーディングや文字コード変換を自動的に行なった上メールを送信してくれます。サーバ環境に問題さえなければ、実に便利な関数です。問題さえなければ…(^_^;)

問題のあるサーバ環境

 うちのサーバ環境は、ご存知の通りTurbolinuxを使用していますので、基本文字コードはEUC-JPです。又、Turbolinuxは日本語に適した環境にチューニングされていますから、PHPのmb_send_mail()関数も特別な設定なく文字コード変換も自動で行なってくれます。

 では、問題のあるサーバ環境とはどう言ったものでしょうか。それは十分に日本語環境に対応していないサーバOSの場合です。例えばFedora Coreなどは基本文字コードがUTF-8になっています。こう言った場合、サーバの基本となる言語指定も異なるでしょうし、サーバ自体の基本文字コードもEUC-JPではありませんから、mb_send_mail()関数をそのまま単独で使おうとすると、文字コード変換の際に支障をきたしてしまいます。

 このような場合、mb_send_mail()関数は単独では正常に動いてくれません。mb_language()関数で言語設定を施してやるとか、mb_internal_encoding()関数で内部エンコーディングの言語設定を施してやるとかの対策が必要です。

 サーバOSの種類によって具体的な対策法は異なりますので、ここでは余り具体的な記述は避けますが、文字コードの問題についてはまだまだ奥が深いので、みなさんそれぞれ研究して見ては如何でしょうか。かく言う私も、まだはっきりと詳細が把握できていないのが実情ですし…(^^ゞ

セッション管理 前へ

HOME

次へ