休憩~

家のテスト環境で動いて、仕事のテストサーバーに上げたら動かん(文字コード絡みのトラブル)。

ぷっつんきそうになったので、ちと休憩~。落ち着いて見直したら簡単なに直った~とかいうことはしょっちゅうあるので、こんなときは一休みして落ち着こう。

UTF-8 な html(ってかphp)のフォームから日本語投げたら、php側(UTF-8で保存してあるやつ)でなぜかEUCになってる・・・まぁ、mb_convert_encoding をどっかに入れりゃ直るとは思うんだけど・・・、なんかかっこ悪いから、落ち着いてちゃんと見よう。

でも、テストサーバーのわりに本番と環境が全然違うから、本番でも早めにチェックしないと・・・。

慣れないことだから大変。

  • ks

    お久しぶりです。

    mbstring.internal_encoding = EUC-JPになっているとか、なっていないとかでしょうか?
    最初に mb_internal_encoding(“UTF-8″) で設定してあげるとかどうなのでしょう?
    …詳細は詳しい人におまかせッ(何

  • ks

    お久しぶりです。

    mbstring.internal_encoding = EUC-JPになっているとか、なっていないとかでしょうか?
    最初に mb_internal_encoding(“UTF-8″) で設定してあげるとかどうなのでしょう?
    …詳細は詳しい人におまかせッ(何

  • hideh

    >ks さん
    あけましておめでとうございます。お久しぶりです。
    mb_internal_encoding(”UTF-8″)  やってもダメなんです。

    —–
    <?php
    mb_internal_encoding(“UTF-8″);

    echo “日本語(UTF-8)n”;
    foreach ($HTTP_GET_VARS as $key => $value) {
        echo “$key : $valuen”;
    }
    ?>
    —–
    これをUTF-8で保存してサーバーに上げ、
    hoge.php?q=%E6%97%A5%E6%9C%AC%E8%AA%9E

    ってやると、最初のはUTF-8、次のはEUCになって出てくるんですよ・・・。

    httpへっだは
    —-
    Date: Thu, 04 Jan 2007 00:11:22 GMT
    Server: A p a c h e
    Keep-Alive: timeout=15, max=100
    Connection: Keep-Alive
    Transfer-Encoding: chunked
    Content-Type: text/html; charset=EUC-JP
    —-

    # 本番のphpでは、Content-Type を
    # header(“Content-Type: text/html; charset=utf-8″);
    # で、強引に戻してます。

    Apache のせいか php のせいか・・・。

  • hideh

    >ks さん
    あけましておめでとうございます。お久しぶりです。
    mb_internal_encoding(”UTF-8″)  やってもダメなんです。

    —–
    <?php
    mb_internal_encoding(“UTF-8″);

    echo “日本語(UTF-8)\n”;
    foreach ($HTTP_GET_VARS as $key => $value) {
        echo “$key : $value\n”;
    }
    ?>
    —–
    これをUTF-8で保存してサーバーに上げ、
    hoge.php?q=%E6%97%A5%E6%9C%AC%E8%AA%9E

    ってやると、最初のはUTF-8、次のはEUCになって出てくるんですよ・・・。

    httpへっだは
    —-
    Date: Thu, 04 Jan 2007 00:11:22 GMT
    Server: A p a c h e
    Keep-Alive: timeout=15, max=100
    Connection: Keep-Alive
    Transfer-Encoding: chunked
    Content-Type: text/html; charset=EUC-JP
    —-

    # 本番のphpでは、Content-Type を
    # header(“Content-Type: text/html; charset=utf-8″);
    # で、強引に戻してます。

    Apache のせいか php のせいか・・・。

  • ks

    …挨拶忘れてました^^;;
    あけましておめでとうございます。
    今年はよろしくお願い致します(何

    と、すると default_charset の方(PHPの設定)なので…
    php.ini/.htaccess で default_charset の設定をするか、
    ini_set (“default_charset”, “UTF-8″); するか、かなと…

    試しに ini_set してみたら(www.ksworks.org/test/hoge.php)
    ちゃんと出たぽいような気がします。

  • ks

    …挨拶忘れてました^^;;
    あけましておめでとうございます。
    今年はよろしくお願い致します(何

    と、すると default_charset の方(PHPの設定)なので…
    php.ini/.htaccess で default_charset の設定をするか、
    ini_set (“default_charset”, “UTF-8″); するか、かなと…

    試しに ini_set してみたら(www.ksworks.org/test/hoge.php)
    ちゃんと出たぽいような気がします。

  • ma2ma2

    あけおめ。今年もよろしくです。

    もう解決したかと思いますが、phpinfoでmbstring部分がどうなってるかを見るとよいと思いますよ~。我が家のサーバもUTF-8でやってますが、下記のとおり、基本的にサーバ側の環境設定依存しないように、自動的な変換は一切やってません。問題のサーバ側の環境設定を無変換設定に変えられるようなら無効化するとよいと思いますが、そうもいかない事情も多々あると思いますので、その場合は、次の3箇所のポイントが怪しいかと。ご参考までに。

    <自動変換のポイント>
    1http_input
    2internal_encoding
    3http_output

    <我が家の無変換設定>
    Directive Local Value Master Value
    mbstring.detect_order no value no value
    mbstring.encoding_translation Off Off
    mbstring.func_overload 0 0
    mbstring.http_input pass pass
    mbstring.http_output pass pass
    mbstring.internal_encoding no value no value
    mbstring.language neutral neutral
    mbstring.strict_detection Off Off
    mbstring.substitute_character no value no value

    ※Master Value => php.ini で設定された値
    ※Local Value => .htaccessやhttpd.conf等で設定を定義した場合

  • ma2ma2

    あけおめ。今年もよろしくです。

    もう解決したかと思いますが、phpinfoでmbstring部分がどうなってるかを見るとよいと思いますよ~。我が家のサーバもUTF-8でやってますが、下記のとおり、基本的にサーバ側の環境設定依存しないように、自動的な変換は一切やってません。問題のサーバ側の環境設定を無変換設定に変えられるようなら無効化するとよいと思いますが、そうもいかない事情も多々あると思いますので、その場合は、次の3箇所のポイントが怪しいかと。ご参考までに。

    <自動変換のポイント>
    1http_input
    2internal_encoding
    3http_output

    <我が家の無変換設定>
    Directive Local Value Master Value
    mbstring.detect_order no value no value
    mbstring.encoding_translation Off Off
    mbstring.func_overload 0 0
    mbstring.http_input pass pass
    mbstring.http_output pass pass
    mbstring.internal_encoding no value no value
    mbstring.language neutral neutral
    mbstring.strict_detection Off Off
    mbstring.substitute_character no value no value

    ※Master Value => php.ini で設定された値
    ※Local Value => .htaccessやhttpd.conf等で設定を定義した場合

  • hideh

    >ks さん
    ありがとうございます~。
    ini_set (”default_charset”, “UTF-8″);
    で、とりあえず、ヘッダのContent-type は解決したのですが、
    相変わらずGETの値は EUC でした

    >ma2ma2さん
    お久しぶりです~。
    まだ、mb_convert_encoding で逃げてます。
    (そのテストサーバーで動いても本番と環境違うので、無駄な作業になる不安もあったり・・・)

    理想としては、htmlの文字コードが SJIS でも EUC でも UTF-8 でも、
    $hoge = $_GET['hoge'] で取得したときに、UTF-8 になっているといいなぁと。

    php.ini をいじる権限が無い+ phpinfo(); が無効化されているので、
    設定調べるのに難儀しているとこです。

    とりあえず、こう入れたところ・・・
    <?php
    ini_set(“mbstring.script_encoding”, “UTF-8″);
    ini_set(“default_charset”,”UTF-8″);
    mb_internal_encoding(“UTF-8″);

    $mb = mb_get_info(“all”);

    foreach ($mb as $key => $value){
        echo “$key : $value”;
    }
    ?>

    queryなしでアクセスしたところ、こう出ました
    —-
    internal_encoding : UTF-8
    http_input :
    http_output : pass
    func_overload : no overload
    mail_charset : (略
    mail_header_encoding : (略
    mail_body_encoding : (略
    —-

  • hideh

    >ks さん
    ありがとうございます~。
    ini_set (”default_charset”, “UTF-8″);
    で、とりあえず、ヘッダのContent-type は解決したのですが、
    相変わらずGETの値は EUC でした

    >ma2ma2さん
    お久しぶりです~。
    まだ、mb_convert_encoding で逃げてます。
    (そのテストサーバーで動いても本番と環境違うので、無駄な作業になる不安もあったり・・・)

    理想としては、htmlの文字コードが SJIS でも EUC でも UTF-8 でも、
    $hoge = $_GET['hoge'] で取得したときに、UTF-8 になっているといいなぁと。

    php.ini をいじる権限が無い+ phpinfo(); が無効化されているので、
    設定調べるのに難儀しているとこです。

    とりあえず、こう入れたところ・・・
    <?php
    ini_set(“mbstring.script_encoding”, “UTF-8″);
    ini_set(“default_charset”,”UTF-8″);
    mb_internal_encoding(“UTF-8″);

    $mb = mb_get_info(“all”);

    foreach ($mb as $key => $value){
        echo “$key : $value
    “;
    }
    ?>

    queryなしでアクセスしたところ、こう出ました
    —-
    internal_encoding : UTF-8
    http_input :
    http_output : pass
    func_overload : no overload
    mail_charset : (略
    mail_header_encoding : (略
    mail_body_encoding : (略
    —-