[PHP-users 8144] Re: 文字コード変換について

Yasuo Ohgaki php-users@php.gr.jp
Wed, 19 Jun 2002 16:51:39 +0900


大垣です。

Im wrote:
> mbstring関連文書をみていて疑問に思ったことですが、
> 内部処理用文字コード(普通EUC)、http output用文字コード(普通SJI
> S)に 分けて互い変換しながら処理する場合が
> 一般的な方法になっていますね。
> 
> 必ずこのようにする必要があるのでしょか?
> 変換の過程が多ければ多いほどover headが大きくなると思うのですが…

mbstringは内部的に全ての文字コードをUnicodeに変換しています。
つまり、UTF-8等を使うともっとも効率良く動作します。

ですから、出力エンコーディングをUnicode以外にする場合、
変換(正確にはテーブルルックアップ)が発生するのであまり
SJIS、EUC間ではパフォーマンスの差はでないと思います。

# Benchmarkを取るのが一番ですが。

ご存知と思いますが、Unicodeが良いと言っても、UCS-2な
どのワイド文字は内部エンコーディングには使えません。

> 
> そして input, output, DBMSの文字コードを全部EUC-JPで統一して見たんですけど
> (mbstring.http_input = EUC-JPに設定し、
>  html headerに <meta http-equiv=Content-Type CONTENT='text/html;
> charset=EUC-JP'>を 追加しました。
>  php 自体も EUCで書きました。)
> 
> こうすると、system的には問題がなかったんですけど htmlのソースを見ると
> 文字化けが起きてしまったんです。
> 多分 日本語版Windowsの基本文字コードが JISになっているのが問題だと思いま
> すけど…

HTTPヘッダーの指定がEUCとかiso-8859-1になっているのだと思います。
(この手のヘッダー送信ミスは良く見かけます)

metaタグでのエンコーディングの指定は補助的な機能なので、ヘッダー、
DTD、metaタグ全てに正しい(利用している)エンコーディングを指定
すると文字化けはなくなるはずです。

> 
> inputはEUCに、 outputはJISに変換するしかないですね…

通常、BrowserはHTMLを記述しているエンコーディングと同じエンコーディ
ングで文字を送信しています。したがって、inputはauto, outputは希望
するエンコーディングに設定する事をお勧めします。

php.iniにdefault_charsetがありますが、mbstringを使う環境では
設定するとおかしくなるケースがあります。普通はコメントアウトしておく
方が無難です。

--
Yasuo Ohgaki