休憩~
家のテスト環境で動いて、仕事のテストサーバーに上げたら動かん(文字コード絡みのトラブル)。
ぷっつんきそうになったので、ちと休憩~。落ち着いて見直したら簡単なに直った~とかいうことはしょっちゅうあるので、こんなときは一休みして落ち着こう。
UTF-8 な html(ってかphp)のフォームから日本語投げたら、php側(UTF-8で保存してあるやつ)でなぜかEUCになってる・・・まぁ、mb_convert_encoding をどっかに入れりゃ直るとは思うんだけど・・・、なんかかっこ悪いから、落ち着いてちゃんと見よう。
でも、テストサーバーのわりに本番と環境が全然違うから、本番でも早めにチェックしないと・・・。
慣れないことだから大変。
1 月 5th, 2007 at 3:32 am
お久しぶりです。
mbstring.internal_encoding = EUC-JPになっているとか、なっていないとかでしょうか?
最初に mb_internal_encoding(”UTF-8″) で設定してあげるとかどうなのでしょう?
…詳細は詳しい人におまかせッ(何
1 月 5th, 2007 at 4:19 am
>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 のせいか・・・。
1 月 5th, 2007 at 11:08 am
…挨拶忘れてました^^;;
あけましておめでとうございます。
今年はよろしくお願い致します(何
と、すると default_charset の方(PHPの設定)なので…
php.ini/.htaccess で default_charset の設定をするか、
ini_set (”default_charset”, “UTF-8″); するか、かなと…
試しに ini_set してみたら(www.ksworks.org/test/hoge.php)
ちゃんと出たぽいような気がします。
1 月 5th, 2007 at 9:01 pm
あけおめ。今年もよろしくです。
もう解決したかと思いますが、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等で設定を定義した場合
1 月 6th, 2007 at 8:21 am
>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 : (略
—-