[PHP-users 27089] Re: PHP5.0.5 での文字化けを解決したい

KT tokunaga.k @ gmail.com
2005年 10月 5日 (水) 13:54:56 JST


徳一です。

On 10/5/05, Etsuo SUMIYA <sumiya-e @ ube-shinko.co.jp> wrote:
> どっちが悪いのかわからないのであれば,phpの機能を使わない,ただの
> htmlファイルをEUCで作って表示してみては?

<?php ?> を含まず、php の echo() で日本語を吐き出させない場合、つまり
html の <body> タグの中に日本語を直接書いた場合を試してみました。
----
<body>
日本語
</body>
----
文字化けしました。

となると、apache2 が書き換えている可能性が高いのですが、php ファイルが
http サーバと php でどう処理されているのか、気になります。

前述の作業履歴の中にないのですが、コマンドラインでの処理したらどうなる
のか、という試行があります。その結果、CLI 版 php で前述の ja.php を読
み込むと、

(1) オプション -c で php.ini を指定した場合
    $ cd /cygdrive/c/Apache2/htdocs
    $ php -c /cygdrive/c/windows/php.ini -f ja.php
    <html lang="ja">
      <head>
        <meta http-equiv="Content-type" content="text/html; charset=euc-jp" />
        <title></title>
      </head>

      <body>
    ニ・ワク・ </body>
    </html>

    という出力になります。charset は置換されていないし、「日本語」も出
    力されているようです。この出力を cygwin bash ターミナルの上で表示
    できるように nkf -s にパイプで渡してやると、文字化けしているように
    見える「日本語」も表示されました。

(2) php.ini を指定しなかった場合
    $ php -f ja.php
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html lang="ja">
    <head>
    <meta http-equiv="Content-type" content=
    "text/html; charset=us-ascii">
    <title></title>
    </head>
    <body>
    &AElig;&uuml;&Euml;&Uuml;&cedil;&igrave;
    </body>
    </html>

    charset の置換が起こっています。しかも、html のインデントも崩れて
    います。php が別の初期ファイルで起動され、その設定に従って処理して
    いるようです。では、どこのどの php.ini なんでしょう。

    また、同じことが apache2 を使った場合も起きているならば、apache2
    で使われている php5 は phpinfo() で確認する限り、上記(1)と同じ設定
    済みの c:/windows/php.ini を読み込むと表示されているにもかかわらず、
    何故 (1) と同じように出力しないのか。

apache2 で使う php5 が設定済みの php.ini を本当に使っているのか、疑問
になっています。他に何か気になる点はありませんでしょうか。


PHP-users メーリングリストの案内